Blocco B · La filiera automatizzata — Modulo 11 di 16

Deploy automatico in staging

Obiettivi di oggi

Anatomia del server di esercizio

/srv/pratiche/
├── compose.staging.yaml    # image: dal registry (MAI build:)
├── .env                    # config e segreti, permessi 600 (sistemisti)
├── deploy.sh               # pull + up + smoke test
└── backup/

Il job di deploy

deploy-staging:
  environment: { name: staging }
  rules: [{ if: $CI_COMMIT_BRANCH == "main" }]
  script:
    - scp deploy/* utente@staging:/srv/pratiche/
    - ssh utente@staging "cd /srv/pratiche &&
        TAG=sha-$CI_COMMIT_SHORT_SHA ./deploy.sh"

Lo smoke test non è opzionale

for i in $(seq 1 20); do
  curl -fsS http://localhost:8080/health && exit 0
  sleep 3
done
exit 1     # deploy FALLITO → pipeline rossa → tutti lo vedono

Un deploy senza verifica è una speranza. Il job fallisce se il servizio non risponde.

Laboratorio (2h)

  1. compose.staging.yaml + deploy.sh; job deploy-staging
  2. Merge su main → osserva lo staging aggiornarsi da solo
  3. Sabota lo staging → lo smoke test boccia il deploy

Riepilogo e prossimo passo