Foglio di riferimento per GitHub Actions - Struttura standard e elenco delle azioni più utili
Una breve panoramica su GitHub Actions comuni e la loro struttura.
GitHub Actions è una piattaforma di automazione e CI/CD all’interno di GitHub, utilizzata per costruire, testare e distribuire il tuo codice in base a eventi come push, richieste di pull o su un orario predefinito.
Oltre all’utilizzo standard di GitHub, puoi utilizzare GitHub Actions anche in un server Gitea self-hosted.
Questo riepilogo copre la struttura di GitHub Actions, una breve descrizione e le azioni più comuni utilizzate nei flussi di lavoro open source e commerciali. Le azioni coprono strumenti ufficiali, della comunità e di terze parti, supportando l’automazione da costruzioni e test alla distribuzione, gestione delle release, QA e notifiche.
Struttura di Configurazione Base
I workflow di GitHub Actions sono definiti in file YAML situati nella directory .github/workflows
all’interno del repository.
name: Nome del Workflow
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Configura Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Esegui test
run: npm test
- Il blocco on specifica gli eventi di attivazione.
- Ogni job viene eseguito su un proprio runner.
- steps possono eseguire comandi shell o chiamare azioni riutilizzabili.
Componenti Principali del Workflow
Componente | Descrizione |
---|---|
Workflow | Processo automatizzato (YAML) attivato da un evento |
Evento | Attività che attiva il workflow (push, pull_request, ecc.) |
Job | Serie di passaggi eseguiti su un runner, possono essere eseguiti sequenzialmente o in parallelo |
Step | Ogni comando o azione in un job |
Runner | VM o container dove vengono eseguiti i job |
Azione | Estensione o add-on riutilizzabile che incapsula un compito |
Eventi di Attivazione
- push
- pull_request
- schedule (utilizzando la sintassi cron)
- workflow_dispatch (attivazione manuale, consente parametri di input)
- release, issue, ecc.
Esempio:
on:
push:
branches: [ main ]
workflow_dispatch:
inputs:
environment:
description: 'Ambiente di distribuzione'
required: true
default: 'production'
type: string
Azioni Utili Predefinite
Azione | Scopo | Parametri Comuni |
---|---|---|
actions/checkout | Controlla il codice del repository | ref, token, submodules, persist-credentials |
actions/setup-node | Configura l’ambiente Node.js | node-version, cache, architecture, check-latest |
actions/setup-python | Configura Python | python-version, architecture |
actions/cache | Caching delle dipendenze | path, key, restore-keys |
docker/build-push-action | Costruisci e pusha immagini Docker | context, file, platforms, tags, push, build-args |
actions/upload-artifact | Carica artefatti di build | name, path, if-no-files-found |
actions/download-artifact | Scarica artefatti | name, path |
github/email-actions | Invia notifiche email | to, subject, content, attachments |
peter-evans/create-pull-request | Crea PRs tramite workflow | branch, title, body, labels, base |
actions/github-script | Esegui JavaScript arbitrario nel tuo workflow | script, github-token |
Parametri delle Azioni
Parametri Generali per qualsiasi Chiamata di Azione:
- name: Alcuna Azione o Passo
uses: owner/repo@ref
with:
param1: valore
param2: valore
env:
ENV_VAR: valore
if: ${{ condizione }}
run: comando_da_eseguire
shell: bash|pwsh|python|sh
continue-on-error: true|false
- with: argomenti passati all’azione (vedi la documentazione dell’azione per tutte le opzioni)
- env: variabili ambiente per il passo
- if: esecuzione condizionale
- run: comandi shell (se non si utilizza un’azione)
- shell: shell utilizzata per eseguire il passo
- continue-on-error: procedi anche se il passo fallisce
Definizione di Input Personalizzati per un’Azioni
Nella metadata dell’azione (action.yml):
inputs:
example-input:
description: 'Un esempio di input'
required: false
default: 'default-value'
Quando utilizzato in un workflow:
- uses: my/action@v1
with:
example-input: 'custom-value'
Accessibile come variabile ambiente INPUT_EXAMPLE_INPUT
quando l’azione viene eseguita.
Esempio: Workflow con Parametri Manuali
name: Deploy
on:
workflow_dispatch:
inputs:
environment:
description: 'Ambiente di distribuzione'
required: true
default: 'production'
type: string
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout del codice
uses: actions/checkout@v4
- name: Distribuisci nell'ambiente
run: echo "Distribuendo a ${{ github.event.inputs.environment }}"
Mercato delle Azioni
- Disponibili migliaia di azioni riutilizzabili nel GitHub Marketplace.
- Le categorie includono: distribuzioni cloud, strumenti di notifica, framework di test, analisi del codice, e molto altro.
- Esplora: actions/checkout, actions/setup-node, docker/build-push-action, actions/cache, actions/upload-artifact, e molti altri.
Consigli Veloci
- Posiziona i file del workflow in
.github/workflows
. - Utilizza workflow_dispatch con inputs per esecuzioni manuali e parametrizzate.
- Utilizza l’azione cache per velocizzare l’installazione delle dipendenze.
- Utilizza la matrice job per testare diverse versioni di OS/running.
- Utilizza i segreti per dati sensibili, riferiti come
${{ secrets.SECRET_NAME }}
.
Questo riferimento copre gli elementi essenziali per utilizzare, configurare e estendere GitHub Actions per l’automazione, CI/CD e altro. Per maggiori dettagli e aggiornamenti, controlla sempre la documentazione ufficiale di GitHub e i repository delle azioni.
Azioni GitHub Comuni
Ecco un elenco pratico di azioni GitHub frequentemente utilizzate che aiutano ad automatizzare CI/CD, test, costruzione, distribuzione e compiti di workflow:
Azioni Ufficiali Principali
Azione | Scopo | Parametri Chiave |
---|---|---|
actions/checkout | Controlla il codice del repository | ref, submodules |
actions/setup-node | Configura l’ambiente Node.js | node-version, cache |
actions/setup-python | Configura l’ambiente Python | python-version |
actions/setup-java | Configura il JDK Java | distribution, java-version |
actions/cache | Caching delle dipendenze e output di build | path, key, restore-keys |
actions/upload-artifact | Carica artefatti di build | name, path |
actions/download-artifact | Scarica artefatti da un workflow | name, path |
actions/github-script | Esegui JavaScript utilizzando il contesto GitHub e API | script |
actions/create-release | Crea un rilascio GitHub | tag_name, release_name |
actions/upload-release-asset | Carica asset a un rilascio | upload_url, asset_path |
actions/labeler | Applica automaticamente etichette a issue/PR | repo-token, configuration-path |
Azioni della Comunità e di Terze Parti Popolari
Azione | Scopo |
---|---|
docker/build-push-action | Costruisci e pusha immagini Docker |
actions/setup-go | Configura l’ambiente Go |
super-linter/super-linter | Lint automatico del codice universale |
trufflesecurity/trufflehog | Scansiona segreti e credenziali |
peaceiris/actions-gh-pages | Distribuisci siti statici a GitHub Pages |
JamesIves/github-pages-deploy-action | Distribuisci progetti a GitHub Pages |
peter-evans/create-pull-request | Crea richieste di pull automaticamente |
softprops/action-gh-release | Crea e carica rilasci GitHub |
ad-m/github-push-action | Pusha modifiche indietro al repository GitHub |
actions/setup-dotnet | Configura il .NET SDK |
azure/login | Autenticati ad Azure |
google-github-actions/auth | Autenticati a Google Cloud |
Azioni per Test, QA e Reporting
Azione | Scopo |
---|---|
actions/setup-ruby | Configura l’ambiente Ruby |
codecov/codecov-action | Carica report di copertura del codice a Codecov |
coverallsapp/github-action | Carica i risultati della copertura a Coveralls |
dorny/test-reporter | Collega i risultati dei test a GitHub Checks |
stefanzweifel/git-auto-commit-action | Auto-committa e pusha modifiche ai file |
Azioni per Distribuzione e Notifica
Azione | Scopo |
---|---|
appleboy/scp-action | Carica file utilizzando SCP |
SamKirkland/FTP-Deploy-Action | Distribuisci file tramite FTP/FTPS |
cypress-io/github-action | Esegui test end-to-end con Cypress |
slackapi/slack-github-action | Invia messaggi a Slack |
dawidd6/action-send-mail | Invia email durante l’esecuzione del workflow |
Azioni di Utilità e Gestione dei Workflow
Azione | Scopo |
---|---|
peter-evans/repository-dispatch | Triggera workflow in repository esterne |
fregante/setup-git-user | Imposta le credenziali Git per i commit |
andymckay/labeler | Etichetta issue e PR in base ai percorsi |
actions/configure-pages | Configura la pubblicazione su GitHub Pages |
EndBug/add-and-commit | Aggiungi e committa file all’interno di un workflow |
dangoslen/changelog-enforcer | Verifica se un changelog è stato aggiornato per le PRs |
Come Trovare di Più
Esistono molte azioni di GitHub che abilitano l’automazione dei workflow come i test automatici, la distribuzione in produzione, le notifiche e le integrazioni con altri servizi. Il GitHub Marketplace elencano migliaia di azioni in categorie come test, sicurezza, distribuzione, notifiche, qualità del codice e integrazioni. Elenco curati come “Awesome Actions” sono anche ottimi per ispirazione e scoperta.
Link Utili
- https://docs.github.com/actions
- https://github.com/marketplace
- https://docs.github.com/en/actions/get-started/quickstart
- https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
- GIT Cheatsheet
- Gitea - installazione e test
- Backup e ripristino del server Gitea
- Utilizzo di Gitea Actions per distribuire un sito Hugo ad AWS S3
- Gitflow: Passaggi, Alternative, Vantaggi e Svantaggi
- DevOps con GitOps - Argo CD, Flux, Jenkins X, Weave GitOps e altri