Rozdział 12: Wdrożenie¶
Odbiorcy: DevOps, inżynierowie platformy
Potok CI/CD¶
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
Dlaczego wdrożenie jest ręczne¶
Automatyczne wdrożenie przy push zostało wyłączone po incydencie ze stycznia 2026, kiedy automatyczne wdrożenia kolidowały z ręcznymi wdrożeniami przez SSH, co powodowało uszkodzenie kontenerów i utratę danych. Workflow wdrożeniowy wymaga teraz:
- Ręcznego uruchomienia przez interfejs GitHub Actions („Run workflow")
- Jawnego wyboru środowiska docelowego (staging lub produkcja)
- Wpisania
DEPLOYjako potwierdzenia - Opcjonalnego podania powodu dla ścieżki audytu
Tagi obrazów¶
Obrazy są tagowane skróconym SHA commitu: sha-XXXXXXX. Krok wdrożeniowy używa GITHUB_SHA do skonstruowania tagu, dzięki czemu wdrożona wersja zawsze odpowiada konkretnemu commitowi.
Jak wdrożyć¶
- Sprawdź, czy budowanie przeszło pomyślnie:
gh run list --workflow=build-and-push.yml --limit=1 - Uruchom wdrożenie:
gh workflow run deploy.yml \ --ref unified-platform \ -f target=production \ -f confirm=DEPLOY \ -f reason="your reason here" - Monitoruj:
gh run watch <run_id> --exit-status - Zweryfikuj:
curl -sS https://scan.rtb.cat/api/health | jq -r '.git_sha,.version'
Weryfikacja wdrożenia¶
Endpoint /api/health zwraca:
{
"git_sha": "94e9cbb0",
"version": "sha-94e9cbb"
}
Porównaj git_sha z commitem, który zamierzałeś wdrożyć.
Sprawdzenie kontraktów po wdrożeniu¶
Po wdrożeniu workflow uruchamia scripts/contracts_check.py wewnątrz kontenera API. Skrypt waliduje, czy kontrakty danych (niepodlegające negocjacji reguły od importu po wyjście API) są zachowane. Jeśli sprawdzenie zakończy się niepowodzeniem:
- Przy
ALLOW_CONTRACT_FAILURE=false(domyślnie): wdrożenie jest oznaczane jako nieudane. - Przy
ALLOW_CONTRACT_FAILURE=true(tymczasowe obejście): wdrożenie kończy się sukcesem z ostrzeżeniem. To obejście musi zostać usunięte po wyjaśnieniu problemu.
Staging a produkcja¶
| Środowisko | Nazwa VM | Domena |
|---|---|---|
| Staging | catscan-production-sg2 |
(wewnętrzna) |
| Produkcja | catscan-production-sg |
scan.rtb.cat |
Najpierw wdróż na staging, zweryfikuj, a potem wdróż na produkcję.
Wycofanie zmian (rollback)¶
Aby wycofać zmiany, wdróż poprzedni sprawdzony commit:
- Zidentyfikuj ostatni poprawny SHA z historii gita lub poprzednich uruchomień wdrożenia.
- Przełącz się na ten SHA w gałęzi unified-platform (lub użyj
--refz commitem). - Uruchom workflow wdrożeniowy.
Nie ma dedykowanego mechanizmu rollbacku. To po prostu wdrożenie starszej wersji.
Powiązane¶
- Przegląd architektury: co jest wdrażane
- Monitoring stanu systemu: weryfikacja poprawności wdrożenia