ADR-0002: ArgoCD (GitOps) làm chủ deployment app; Ansible chỉ provision + bootstrap
- Status: Accepted
- Date: ~2026-06-27 (backfilled 2026-07-25)
- Supersedes: —
- Superseded by: —
Bối cảnh
Ban đầu Ansible vừa provision cluster vừa deploy app qua roles/helm_apps
(SSH + helm upgrade --atomic). Khi số service tăng (6 NestJS + chatbot +
4 Go service), deploy thủ công qua SSH mỗi lần release trở nên chậm và dễ
drift (ai đó helm upgrade tay không qua Git). Repo football-booking-gitops
được tạo để làm nguồn sự thật cho manifest.
Quyết định
roles/argocd cài ArgoCD lên cluster (1 lần, qua Ansible), nhưng sau khi
ArgoCD chạy, mọi deploy/update app đi qua football-booking-gitops
(Application/ApplicationSet trỏ vào repo đó). Ansible không còn tự
helm upgrade app nghiệp vụ nữa — roles/helm_apps chỉ còn dùng cho
provisioning ban đầu/emergency, không phải đường deploy chính thức.
Lựa chọn khác đã cân nhắc
- Giữ Ansible SSH + helm upgrade làm đường deploy chính: đơn giản, không
cần thêm ArgoCD, nhưng không có audit trail rõ ràng, dễ tạo config drift
giữa Git và cluster thật — loại, đã có tiền lệ port-drift (ghi nhận trong
football-booking-terraform/docs/scope.md) do 2 nguồn cùng ghi vào 1 object. - Flux thay ArgoCD: tương đương về nguyên lý GitOps, nhưng ArgoCD có UI trực quan hơn để demo/thesis và dashboard sync status — chọn ArgoCD.
Hệ quả
- Được: 1 nguồn sự thật cho trạng thái deployment (Git), rollback =
git revert, không cần SSH thủ công mỗi lần release. - Đánh đổi: thêm 1 hệ thống (ArgoCD) cần vận hành; quy tắc bất biến: không
bao giờ để Terraform hay Ansible tạo
helm_release/Kubernetes manifest cho app — mọi thay đổi phải đi quafootball-booking-gitops, nếu không sẽ tái tạo lại đúng bug port-drift đã từng gặp.
Liên kết
- Docs liên quan:
roles/argocd/,football-booking-gitops/README.md - ADR liên quan: xem
football-booking-terraform/docs/adr/(ranh giới Terraform vs ArgoCD)