Tag: ci-cd, devops, pipeline, automation, testing, deployment, git
Livello: intermedio
TL;DR: Pipeline automatizzate per validare ogni commit (CI) e rilasciare in staging/produzione in modo affidabile e ripetibile (CD).
CI valida il codice a ogni push tramite build automatica, linting e test.
CD significa Continuous Delivery se il rilascio richiede approvazione manuale.
CD significa Continuous Deployment se il rilascio in produzione e' completamente automatizzato.
Build deterministiche richiedono lockfile e immagini base immutabili.
Pipeline as code: definizione dichiarativa versionata nel repository.
Fail fast: i test piu' veloci e il linting girano nei primi stage.
Artifact immutabili: lo stesso binario o immagine Docker viene promosso tra gli ambienti.
Environment variables e secret non devono mai essere salvati nel codice sorgente.
Branching strategy chiara (es. trunk-based o gitflow) per sincronizzare i trigger della pipeline.
Q: Qual e' la differenza tra Continuous Delivery e Continuous Deployment?R: La Continuous Delivery garantisce che ogni build verde sia pronta per il rilascio ma richiede un gate manuale, mentre il Continuous Deployment porta automaticamente ogni modifica validata direttamente in produzione.
Q: Come riduci i tempi di esecuzione di una pipeline CI lenta?R: Isolo i job indipendenti parallelizzandoli, abilito la cache per le dipendenze e i layer Docker, e sposto i test end-to-end complessi in stage successivi o notturni.
Q: Come gestisci il rollback in caso di errore post-deploy?R: Uso deployment strategies come blue-green o canary per deviare subito il traffico, mantenendo la versione precedente attiva, oppure avvio il deploy dell'artifact stabile precedente.
Test non deterministici (flaky tests) che bloccano la pipeline senza veri bug.
Ricompilare l'applicazione per ogni ambiente anziche' promuovere lo stesso artifact.
Hardcoding di credenziali o API key nei file di configurazione della pipeline.
Mancanza di timeout sui singoli job, con conseguente blocco dei runner.
Esecuzione sequenziale di step indipendenti che raddoppia i tempi di feedback.
# Esempio pipeline GitHub Actions minimale
name: CI Pipeline
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- run: npm ci
- run: npm run lint
- run: npm test
[ ] Strategie di deployment: Canary vs Blue-Green vs Rolling
[ ] Gestione del caching dei package manager e layer Docker nei runner
[ ] Configurazione e rotazione di OIDC/secret nei workflow CI/CD
[x] Differenza sostanziale tra Continuous Delivery e Deployment