🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Automatizzare con GitHub Actions

Codegrind Team•Aug 28 2024

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 branch main.
  • jobs:: Definisce i lavori che verranno eseguiti nel workflow. In questo esempio, c’è un singolo lavoro chiamato build.
  • 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.