El concepte d'Integració Contínua (Continuous Integration o CI) i
Desplegament Continu (Continuous Deployment o CD) és una pràctica
que permet als equips de desenvolupament integrar els canvis en el codi
de manera regular i distribuir-los de manera automàtica.
Aquesta pràctica és essencial en el desenvolupament modern de software,
ja que accelera el procés de lliurament de noves funcionalitats,
redueix el temps de parada i millora la qualitat del projecte mitjançant
l'automatització de tasques repetitives, sense necessitat d'intervenció manual.
Les tasques més comunes que es poden automatitzar són:
Compilació i empaquetatge de l'aplicació
Proves i validacions
Anàlisi de la qualitat del codi: linters, anàlisi estàtica, etc.
Desplegament de l'aplicació i gestió de llançaments
La Integració Contínua (Continuous Integration o CI) consisteix en integrar
de manera contínua i freqüent els canvis a la branca principal del projecte,
provant de manera automàtica cada canvi quan s'integra al repositori.
Això permet detectar i solucionar errors o vulnerabilitats de manera més senzilla
i ràpida, ja que els canvis són més xicotets i fàcils de revisar.
A més, la integració contínua facilita la col·laboració entre els membres de l'equip,
ja que minimitza la possibilitat de conflictes entre diferents branques encara que
es treballa de manera paral·lela.
Un flux de treball típic de CI inclou els següents passos:
Anàlisi estàtica del codi, que verifique la qualitat del codi font
i assegure que compleix amb els estàndards establerts.
Compilació del projecte i execució de proves automatitzades,
que assegure que el projecte es pot compilar correctament
i que les funcionalitats implementades funcionen com s'espera.
El Desplegament Continu (Continuous Deployment o CD) és el procés
d'automatitzar les tasques necessàries per desplegar una aplicació.
El CD pot incloure des de preparar la infraestructura fins a desplegar
l'aplicació a un entorn de proves o producció.
Un flux de treball típic de CD inclou els següents passos:
Desplegament automàtic a un entorn de proves,
on es poden realitzar proves addicionals i validacions.
Desplegament automàtic a l'entorn de producció,
que permet lliurar noves funcionalitats als usuaris de manera ràpida
i segura.
Els fluxos de treball a CI/CD o, també coneguts com a CI/CD pipelines, són
processos automatitzats que s'encarreguen de la compilació, la prova i el desplegament
de les aplicacions.
Es componen de diferents tasques que s'executaran automàticament sense necessitat d'intervenció
humana.
GitHub Actions
és una funcionalitat de GitHub que permet crear
fluxos de treball sobre un repositori. Es gestionen des de l'apartat Actions,
on es poden consultar les tasques d'automatització configurades i les execucions d'aquestes.
Cada projecte té unes característiques i necessitats pròpies i, per tant, caldrà adaptar els processos de la naturalesa del projecte.
Consulteu els Exemples de fluxos de treball per trobar exemples de fluxos de treball més complexos i adaptats a diferents tipus de projectes.
name:GitHub Actions Demorun-name:${{ github.actor }} is testing out GitHub Actions 🚀on:push:workflow_dispatch:jobs:Explore-GitHub-Actions:runs-on:ubuntu-lateststeps:-run:echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."-run:echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"-run:echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."-name:Check out repository codeuses:actions/checkout@v5-run:echo "💡 The ${{ github.repository }} repository has been cloned to the runner."-run:echo "🖥️ The workflow is now ready to test your code on the runner."-name:List files in the repositoryrun:|ls ${{ github.workspace }}-run:echo "🍏 This job's status is ${{ job.status }}."
GitHub Docs
La configuració bàsica d'una tasca d'automatització es fa amb els següents camps:
Les tasques d'automatització s'executen automàticament
quan es compleixen les condicions definides en la secció on
de la configuració.
A la secció Actions es poden consultar les execucions de les tasques d'automatització
definides en el repositori.
A més, és possible configurar una tasca perquè es puga executar manualment si s'especifica
workflow_dispatch en la secció on de la configuració.
on:workflow_dispatch:
Això permet llançar l'automatització manualment des de la secció Actions.
Figura 2. Execució manual d'una automatització des de Actions.
En cas de necessitar provar una tasca d'automatització localment
sense haver de publicar canvis al repositori,
es pot fer ús d'eines com act.
Aquesta eina utilitza Docker
per simular l'entorn d'execució semblant a l'entorn de GitHub Actions,
que permet provar les tasques sense haver de publicar els canvis al repositori remot.
jpuigcerver@fp:~/exemple-actions(main)$act
INFO[0000] Using docker host 'unix:///var/run/docker.sock', and daemon socket 'unix:///var/run/docker.sock' [GitHub Actions Demo/Explore-GitHub-Actions] ⭐ Run Set up job[GitHub Actions Demo/Explore-GitHub-Actions] 🚀 Start image=catthehacker/ubuntu:act-latest[GitHub Actions Demo/Explore-GitHub-Actions] 🐳 docker pull image=catthehacker/ubuntu:act-latest platform= username= forcePull=true[GitHub Actions Demo/Explore-GitHub-Actions] 🐳 docker create image=catthehacker/ubuntu:act-latest platform= entrypoint=["tail" "-f" "/dev/null"] cmd=[] network="host"[GitHub Actions Demo/Explore-GitHub-Actions] 🐳 docker run image=catthehacker/ubuntu:act-latest platform= entrypoint=["tail" "-f" "/dev/null"] cmd=[] network="host"[GitHub Actions Demo/Explore-GitHub-Actions] 🐳 docker exec cmd=[node --no-warnings -e console.log(process.execPath)] user= workdir=[GitHub Actions Demo/Explore-GitHub-Actions] ✅ Success - Set up job[GitHub Actions Demo/Explore-GitHub-Actions] ⭐ Run Main echo "🎉 The job was automatically triggered by a push event."[GitHub Actions Demo/Explore-GitHub-Actions] 🐳 docker exec cmd=[bash -e /var/run/act/workflow/0] user= workdir=| 🎉 The job was automatically triggered by a push event.[GitHub Actions Demo/Explore-GitHub-Actions] ✅ Success - Main echo "🎉 The job was automatically triggered by a push event." [68.068069ms][GitHub Actions Demo/Explore-GitHub-Actions] ⭐ Run Main echo "🐧 This job is now running on a Linux server hosted by GitHub!"[GitHub Actions Demo/Explore-GitHub-Actions] 🐳 docker exec cmd=[bash -e /var/run/act/workflow/1] user= workdir=| 🐧 This job is now running on a Linux server hosted by GitHub![GitHub Actions Demo/Explore-GitHub-Actions] ✅ Success - Main echo "🐧 This job is now running on a Linux server hosted by GitHub!" [66.309582ms][GitHub Actions Demo/Explore-GitHub-Actions] ⭐ Run Main echo "🔎 The name of your branch is refs/heads/main and your repository is cursgit/exemple-actions."[GitHub Actions Demo/Explore-GitHub-Actions] 🐳 docker exec cmd=[bash -e /var/run/act/workflow/2] user= workdir=| 🔎 The name of your branch is refs/heads/main and your repository is cursgit/exemple-actions.[GitHub Actions Demo/Explore-GitHub-Actions] ✅ Success - Main echo "🔎 The name of your branch is refs/heads/main and your repository is cursgit/exemple-actions." [65.540094ms][GitHub Actions Demo/Explore-GitHub-Actions] ⭐ Run Main Check out repository code[GitHub Actions Demo/Explore-GitHub-Actions] 🐳 docker cp src=/home/jpuigcerver/exemple-actions/. dst=/home/jpuigcerver/exemple-actions[GitHub Actions Demo/Explore-GitHub-Actions] ✅ Success - Main Check out repository code [15.128121ms][GitHub Actions Demo/Explore-GitHub-Actions] ⭐ Run Main echo "💡 The cursgit/exemple-actions repository has been cloned to the runner."[GitHub Actions Demo/Explore-GitHub-Actions] 🐳 docker exec cmd=[bash -e /var/run/act/workflow/4] user= workdir=| 💡 The cursgit/exemple-actions repository has been cloned to the runner.[GitHub Actions Demo/Explore-GitHub-Actions] ✅ Success - Main echo "💡 The cursgit/exemple-actions repository has been cloned to the runner." [65.674574ms][GitHub Actions Demo/Explore-GitHub-Actions] ⭐ Run Main echo "🖥 The workflow is now ready to test your code on the runner."[GitHub Actions Demo/Explore-GitHub-Actions] 🐳 docker exec cmd=[bash -e /var/run/act/workflow/5] user= workdir=| 🖥 The workflow is now ready to test your code on the runner.[GitHub Actions Demo/Explore-GitHub-Actions] ✅ Success - Main echo "🖥 The workflow is now ready to test your code on the runner." [75.593933ms][GitHub Actions Demo/Explore-GitHub-Actions] ⭐ Run Main List files in the repository[GitHub Actions Demo/Explore-GitHub-Actions] 🐳 docker exec cmd=[bash -e /var/run/act/workflow/6] user= workdir=| README.md[GitHub Actions Demo/Explore-GitHub-Actions] ✅ Success - Main List files in the repository [85.435409ms][GitHub Actions Demo/Explore-GitHub-Actions] ⭐ Run Main echo "🍏 This job's status is success."[GitHub Actions Demo/Explore-GitHub-Actions] 🐳 docker exec cmd=[bash -e /var/run/act/workflow/7] user= workdir=| 🍏 This job's status is success.[GitHub Actions Demo/Explore-GitHub-Actions] ✅ Success - Main echo "🍏 This job's status is success." [67.346446ms][GitHub Actions Demo/Explore-GitHub-Actions] ⭐ Run Complete job[GitHub Actions Demo/Explore-GitHub-Actions] Cleaning up container for job Explore-GitHub-Actions[GitHub Actions Demo/Explore-GitHub-Actions] ✅ Success - Complete job[GitHub Actions Demo/Explore-GitHub-Actions] 🏁 Job succeeded
Les tasques d'automatització també es poden combinar amb les Pull Requests per comprovar que els canvis proposats compleixen
amb els estàndards de qualitat del projecte abans de ser integrats a la branca principal, facilitant la integració contínua (CI).
Algunes de les tasques més comunes que es defineixen en aquest cas són
Execució de proves automatitzades
Anàlisi de l'estil del codi
Anàlisi de la qualitat del codi
Figura 3. Exemple d'una tasca d'automatització que s'executa a una Pull Request
Figura 4. Exemple d'una tasca d'automatització que s'ha executat correctament a una Pull Request
De vegades, les tasques d'automatització necessiten informació sensible per a executar-se,
com ara credencials d'accés a serveis externs, claus d'API, etc.
En aquests casos, és important no incloure aquesta informació directament en els fitxers de configuració, ja que aquests fitxers són públics
i poden ser accedits per qualsevol persona que tinga accés al repositori.
GitHub Actions permet gestionar aquesta informació sensible d'una manera segura mitjançant els Secrets.
Són variables d'entorn que es poden utilitzar en les tasques d'automatització, però que no són visibles ni accessibles des dels fitxers de configuració.
Per a configurar un secret, cal anar a la secció Settings del repositori, a l'apartat Secrets and variables > Actions.
Un lloc web estàtic és un lloc web que no requereix d'un servidor web
per generar les pàgines HTML, sinó que les pàgines ja estan generades
i són servides directament. ↩
📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent
a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.