Hoofdstuk 12: Deployment¶
Doelgroep: DevOps, platform-engineers
CI/CD-pipeline¶
Push to unified-platform
│
▼
build-and-push.yml (automatic)
├── Run contract & recovery tests
├── Build API image
├── Build Dashboard image
└── Push to Artifact Registry
│
▼ (manual trigger)
deploy.yml (workflow_dispatch)
├── SSH into VM via IAP tunnel
├── git pull on VM
├── docker compose pull (prebuilt images)
├── docker compose up -d --force-recreate
├── Health check (60s wait + curl localhost:8000/health)
└── Post-deploy contract check
Waarom deployment handmatig is¶
Automatische deployment bij een push is uitgeschakeld na een incident in januari 2026, waarbij automatische deploys conflicteerden met handmatige SSH-deploys. Dit leidde tot corrupte containers en dataverlies. De deploy-workflow vereist nu:
- Handmatige trigger via de GitHub Actions UI ("Run workflow")
- Expliciete selectie van het doelomgeving (staging of productie)
- Het invoeren van
DEPLOYals bevestiging - Een optioneel redenveld voor de audittrail
Image-tags¶
Images worden getagd met de verkorte git-SHA: sha-XXXXXXX. De deploy-stap gebruikt GITHUB_SHA om de tag samen te stellen, zodat de gedeployde versie altijd overeenkomt met een specifieke commit.
Hoe te deployen¶
- Controleer of de build geslaagd is:
gh run list --workflow=build-and-push.yml --limit=1 - Trigger de deployment:
gh workflow run deploy.yml \ --ref unified-platform \ -f target=production \ -f confirm=DEPLOY \ -f reason="your reason here" - Monitor:
gh run watch <run_id> --exit-status - Verifieer:
curl -sS https://scan.rtb.cat/api/health | jq -r '.git_sha,.version'
Een deployment verifieren¶
Het /api/health-endpoint retourneert:
{
"git_sha": "94e9cbb0",
"version": "sha-94e9cbb"
}
Vergelijk git_sha met de commit die je bedoelde te deployen.
Post-deploy contractcontrole¶
Na de deployment voert de workflow scripts/contracts_check.py uit binnen de API-container. Dit valideert dat datacontracten (niet-onderhandelbare regels van import tot API-uitvoer) worden nageleefd. Als de controle mislukt:
- Met
ALLOW_CONTRACT_FAILURE=false(standaard): de deploy wordt als mislukt gemarkeerd. - Met
ALLOW_CONTRACT_FAILURE=true(tijdelijke bypass): de deploy slaagt met een waarschuwing. Deze bypass moet na onderzoek worden verwijderd.
Staging vs. productie¶
| Omgeving | VM-naam | Domein |
|---|---|---|
| Staging | catscan-production-sg2 |
(intern) |
| Productie | catscan-production-sg |
scan.rtb.cat |
Deploy eerst naar staging, verifieer, en deploy dan naar productie.
Rollback¶
Om terug te draaien, deploy je een eerder bekende goede commit:
- Identificeer de laatste goede SHA vanuit het git-log of eerdere deploy-runs.
- Check die SHA uit op unified-platform (of gebruik
--refmet de commit). - Trigger de deploy-workflow.
Er is geen apart rollback-mechanisme. Het is simpelweg het deployen van een oudere versie.
Gerelateerd¶
- Architectuuroverzicht: wat er gedeployd wordt
- Gezondheidsmonitoring: verifieren dat de deploy gelukt is