Bỏ qua

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 qua football-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)