Automatizzare con GitHub Actions
GitHub Actions è una piattaforma di automazione integrata in GitHub che consente di creare, testare e distribuire il software direttamente dal tuo repository GitHub. Con GitHub Actions, puoi configurare pipeline CI/CD (Continuous Integration/Continuous Deployment) per automatizzare i flussi di lavoro, migliorare la qualità del codice e accelerare il rilascio di nuove funzionalità . In questa guida, esploreremo come configurare e utilizzare GitHub Actions per automatizzare il processo di sviluppo nel tuo repository GitHub.
Cos’è GitHub Actions?
GitHub Actions è una funzionalità di GitHub che permette di creare workflow automatizzati in risposta a eventi specifici, come i commit push, le pull request, o la creazione di un nuovo tag. I workflow sono definiti attraverso file YAML all’interno del repository e possono essere configurati per eseguire una vasta gamma di operazioni, dai test automatizzati alla build del progetto, fino al deployment.
Creare un Workflow di Base con GitHub Actions
Per iniziare con GitHub Actions, puoi creare un workflow di base che esegua azioni come build e test del tuo progetto ogni volta che viene eseguito un push nel repository.
1. Creare la Directory del Workflow
Inizia creando una directory dedicata per i workflow di GitHub Actions all’interno del tuo repository:
mkdir -p .github/workflows
2. Creare un File di Workflow
All’interno della directory workflows
, crea un file YAML che definisca il tuo workflow. Ad esempio, per un progetto Node.js:
# .github/workflows/nodejs.yml
name: Node.js CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: "14"
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
3. Spiegazione del Workflow
name: Node.js CI
: Il nome del workflow.on:
: Specifica quando deve essere eseguito il workflow. In questo caso, il workflow viene eseguito su ogni push o pull request verso il branchmain
.jobs:
: Definisce i lavori che verranno eseguiti nel workflow. In questo esempio, c’è un singolo lavoro chiamatobuild
.runs-on: ubuntu-latest
: Specifica l’ambiente in cui il lavoro sarà eseguito. Qui viene utilizzata l’ultima versione di Ubuntu.steps:
: Elenca i passi da eseguire. Ogni passo può essere un’azione GitHub, un comando di shell o una combinazione di entrambi.
4. Eseguire il Workflow
Dopo aver creato e committato il file YAML, GitHub Actions eseguirà automaticamente il workflow in base agli eventi specificati (push o pull request). Puoi visualizzare l’esecuzione e i risultati nella sezione “Actions” del tuo repository su GitHub.
Esempi di Workflow Avanzati
GitHub Actions offre una grande flessibilitĂ per creare workflow complessi che soddisfano le esigenze di progetti di qualsiasi dimensione.
1. Testare su PiĂą Versioni di Node.js
Se vuoi testare il tuo progetto su diverse versioni di Node.js, puoi configurare un matrix job:
name: Node.js CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12, 14, 16]
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
Questo workflow eseguirĂ i test su tre versioni di Node.js: 12, 14, e 16.
2. Eseguire un Deploy su GitHub Pages
Puoi configurare un workflow per distribuire automaticamente il contenuto del tuo repository su GitHub Pages dopo ogni push al branch main
.
name: Deploy to GitHub Pages
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build the project
run: npm run build
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./build
Questo workflow esegue la build del progetto e poi distribuisce il contenuto generato alla directory ./build
su GitHub Pages.
3. Notifiche su Slack
Puoi inviare notifiche su Slack ogni volta che un workflow viene eseguito, utilizzando un webhook di Slack:
name: Notify Slack on CI status
on: [push, pull_request]
jobs:
notify:
runs-on: ubuntu-latest
steps:
- name: Notify Slack
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
fields: repo,message,commit,author,workflow,took
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
Questo workflow invia una notifica su Slack con lo stato del workflow ogni volta che viene eseguito.
Best Practices per GitHub Actions
- Usa Secret per le Credenziali: Proteggi le informazioni sensibili come token API e chiavi di accesso utilizzando i Secret di GitHub.
- Mantieni i Workflow Semplici e Modulari: Suddividi i workflow complessi in piĂą file YAML per facilitare la manutenzione e la comprensione.
- Ottimizza i Trigger: Evita di eseguire workflow inutili configurando accuratamente i trigger (
on:
) per rispondere solo agli eventi necessari. - Testa Localmente: Usa strumenti come act per testare i workflow GitHub Actions localmente prima di committarli.
- Riutilizza le Azioni: Utilizza azioni esistenti dalla GitHub Marketplace per evitare di reinventare la ruota.
Risolvere Problemi Comuni
Workflow Non Viene Eseguito
Se il workflow non viene eseguito, verifica la configurazione del trigger (on:
) nel file YAML. Assicurati che gli eventi specificati corrispondano agli eventi che ti aspetti di attivare il workflow.
Errori di Permessi
Se incontri errori di permessi, verifica che il token GitHub (secrets.GITHUB_TOKEN
) o le chiavi SSH siano configurati correttamente nel repository.
Workflow Lenti o Inefficaci
Se i workflow sono lenti, prova a ottimizzare le cache o a eseguire solo le azioni necessarie. Utilizza strategie di caching come:
- name: Cache node modules
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
Conclusione
GitHub Actions è uno strumento potente per automatizzare i flussi di lavoro direttamente all’interno del tuo repository GitHub. Con la possibilità di creare workflow personalizzati per la CI/CD, GitHub Actions ti permette di migliorare l’efficienza del tuo team, garantire la qualità del codice e accelerare il processo di rilascio. Seguendo le best practices e utilizzando le funzionalità avanzate di GitHub Actions, potrai costruire pipeline robuste e affidabili per ogni progetto.