Zero-downtime deployment berarti pengguna tidak menerima error saat versi baru dirilis. Kuncinya adalah menjalankan versi lama dan baru secara bersamaan untuk sementara, serta menjaga perubahan database tetap kompatibel.
Build artefak sekali
Artefak yang diuji di CI harus sama dengan yang dijalankan di produksi. Jangan menjalankan instalasi dependency berbeda pada setiap server tanpa lock file.
docker build -t registry.example.com/app:${GIT_SHA} .
docker push registry.example.com/app:${GIT_SHA}Health check sebelum menerima traffic
HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD curl -fsS http://localhost/health/ready || exit 1Readiness harus memeriksa dependency penting tanpa menjadi terlalu berat. Instance baru hanya masuk load balancer setelah benar-benar siap.
Migrasi database memakai pola expand–migrate–contract
- 1Expand: tambahkan kolom/tabel baru tanpa menghapus yang lama.
- 2Deploy kode yang dapat membaca dua bentuk data.
- 3Migrate: isi data lama secara bertahap.
- 4Alihkan pembacaan dan penulisan ke struktur baru.
- 5Contract: hapus struktur lama pada release terpisah.
Rollback harus nyata
Rollback bukan sekadar menjalankan image lama. Pastikan konfigurasi, migration, dan format message tetap kompatibel. Uji rollback dalam staging dan simpan metrik pembanding sebelum release.
| Gate | Contoh |
|---|---|
| Sebelum deploy | Test, security scan, migration check. |
| Saat rollout | Readiness, error rate, latency p95. |
| Setelah traffic switch | Business metric dan log exception. |
| Rollback trigger | Error rate atau latency melewati ambang. |
