Esecuzione condizionale e dipendenze tra job
Controlli quando vengono eseguiti step e job usando le condizioni if, la parola chiave needs, le espressioni e le funzioni di verifica dello stato nei workflow di GitHub Actions.
Esecuzione condizionale e dipendenze tra job è una lezione CI/CD with GitHub Actions & DevOps Pipelines gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento CI/CD with GitHub Actions & DevOps Pipelines, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso CI/CD with GitHub Actions & DevOps Pipelines include 4 lezioni in totale.
Perché le condizioni sono importanti
Non tutti gli step devono essere eseguiti ogni volta. Potrebbe essere necessario eseguire uno step di deploy solo sul branch main oppure uno step di notifica solo quando si verifica un errore.
GitHub Actions consente di associare una condizione if a qualsiasi step o job per controllarne l'esecuzione.
La chiave if
Aggiunga una chiave if: a uno step. Lo step viene eseguito solo quando l'espressione restituisce true.
Le espressioni all'interno di if non richiedono l'involucro ${{ }}, anche se è consentito utilizzarlo.
steps:
- name: Deploy
if: github.ref == 'refs/heads/main'
run: ./deploy.shOggetti di contesto
Le condizioni vengono lette dagli oggetti di contesto che descrivono l'esecuzione:
github— evento, ref, actor, shaenv— variabili d'ambientejobesteps— stato delle attività precedentirunner— sistema operativo e architettura
Ad esempio, github.event_name indica se un push o una pull_request ha attivato l'esecuzione.
Funzioni di verifica dello stato
Per impostazione predefinita, uno step viene ignorato se uno step precedente non è riuscito. Per modificare questo comportamento, utilizzi le funzioni di stato:
success()— vero se nessuno step precedente non è riuscito (impostazione predefinita)failure()— vero se uno qualsiasi degli step precedenti non è riuscitoalways()— viene eseguito in ogni casocancelled()— vero se l'esecuzione è stata annullata
- name: Notify on failure
if: failure()
run: echo 'Build failed, sending alert'Eseguire sempre la pulizia
Un modello comune consiste in uno step di pulizia che deve essere eseguito anche se gli step precedenti non sono riusciti. Utilizzi if: always().
In questo modo, le risorse temporanee, i container o i report dei test vengono gestiti indipendentemente dall'esito.
- name: Upload logs
if: always()
uses: actions/upload-artifact@v4
with:
name: logs
path: ./logsDipendenze tra job con needs
La parola chiave needs fa sì che un job attenda gli altri. Senza di essa, i job vengono eseguiti in parallelo.
Un job elencato in needs deve terminare correttamente prima che venga avviato il job dipendente.
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: npm test
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- run: ./deploy.shDipendenze multiple
Un job può dipendere da diversi job passando un elenco a needs. Attende che tutti siano terminati.
È così che si creano pattern fan-in, in cui un job finale viene eseguito solo dopo che tutti i job paralleli sono terminati correttamente.
release:
needs: [lint, test, build]
runs-on: ubuntu-latest
steps:
- run: echo 'all checks passed'Job condizionali
La chiave if può essere utilizzata anche sui job, non solo sugli step. Una condizione a livello di job determina se viene eseguito l'intero job.
In questo caso, il job di deploy viene eseguito solo per i push verso main, pur dipendendo ancora dai test.
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: ./deploy.shUtilizzare gli output dei job
I job possono passare dati ai job successivi tramite outputs. Un job dipendente li legge attraverso il contesto needs.
In questo modo, una condizione può dipendere da un valore calcolato in precedenza, ad esempio dall'indicazione che una versione è cambiata.
check:
runs-on: ubuntu-latest
outputs:
changed: ${{ steps.diff.outputs.changed }}
steps:
- id: diff
run: echo 'changed=true' >> $GITHUB_OUTPUTCombinare le condizioni
È possibile combinare le espressioni con && (e), || (o) e ! (non).
Questo esempio viene eseguito solo per un push riuscito verso main che non proviene da un fork.
if: success() && github.ref == 'refs/heads/main' && github.event_name == 'push'if sempre con needs
Attenzione: un job con needs viene ignorato se una dipendenza non riesce. Per eseguire comunque un job finale di report, combini needs con if: always().
Al suo interno è possibile esaminare needs.<job>.result per decidere quali informazioni riportare.
report:
needs: [test, build]
if: always()
runs-on: ubuntu-latest
steps:
- run: echo ${{ needs.test.result }}Verifica rapida
Verifichi la propria comprensione dell'esecuzione condizionale.
Riepilogo
Ha imparato a controllare il flusso del workflow con condizioni e dipendenze.
ifcontrolla gli step e i job in base alle espressioni- Le funzioni di stato come
failure()ealways()modificano il comportamento predefinito di ignorare gli elementi dopo un errore needscrea sequenze di esecuzione e pattern fan-in- Gli
outputsdei job forniscono valori alle condizioni successive
Questi elementi di base consentono di creare pipeline precise ed efficienti.
Domande Frequenti
La lezione «Esecuzione condizionale e dipendenze tra job» è gratuita?
Sì — il testo completo di «Esecuzione condizionale e dipendenze tra job» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso CI/CD with GitHub Actions & DevOps Pipelines, passa a CoddyKit PRO. Il corso CI/CD with GitHub Actions & DevOps Pipelines include 4 lezioni in totale.
Cosa imparerò in «Esecuzione condizionale e dipendenze tra job»?
Controlli quando vengono eseguiti step e job usando le condizioni if, la parola chiave needs, le espressioni e le funzioni di verifica dello stato nei workflow di GitHub Actions. Eserciti CI/CD with GitHub Actions & DevOps Pipelines con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare CI/CD with GitHub Actions & DevOps Pipelines?
Non è richiesta alcuna esperienza precedente. CI/CD with GitHub Actions & DevOps Pipelines su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Esecuzione condizionale e dipendenze tra job»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione CI/CD with GitHub Actions & DevOps Pipelines?
Sì. Ogni lezione CI/CD with GitHub Actions & DevOps Pipelines include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Build a matrice per più ambienti
- Memorizzare nella cache le dipendenze per aumentare la velocità
- Workflow e Actions riutilizzabili
- Esecuzione condizionale e dipendenze tra job