Bỏ qua

ADR-0002: CI commit image tag trực tiếp vào repo, không dùng ArgoCD Image Updater

  • Status: Accepted
  • Date: ~2026-06-27 (backfilled 2026-07-25)
  • Supersedes: —
  • Superseded by: —

Bối cảnh

Sau khi CI ở repo service (backend-k3s, chatbot-service-k3s, go-service-k3s) build & push image lên GHCR với tag = git SHA, cần một cơ chế để cluster tự động deploy version mới. Có 2 hướng chuẩn trong GitOps: CI tự commit tag mới vào repo gitops ("push-based"), hoặc dùng ArgoCD Image Updater tự động dò image mới nhất và commit thay ("pull-based").

Quyết định

CI ở repo service tự commit cập nhật image tag vào envs/production/<service>.yaml của repo này (qua PAT/GitHub App), rồi ArgoCD phát hiện thay đổi Git và auto-sync. Không dùng ArgoCD Image Updater.

Lựa chọn khác đã cân nhắc

  • ArgoCD Image Updater: tự động hoàn toàn, không cần CI có quyền ghi vào repo gitops, nhưng thêm 1 controller cần vận hành + cấu hình image-list/policy riêng, và độ trễ phát hiện image mới phụ thuộc polling interval — loại vì CI push trực tiếp cho control rõ ràng hơn (commit message gắn liền với đúng PR/commit gây ra deploy) và không cần thêm controller.
  • Deploy thủ công (kubectl/helm) sau khi CI build xong: mất tính GitOps (không có audit trail tự động), quay lại đúng vấn đề ArgoCD được tạo ra để giải quyết (xem ADR-0002 của football-booking-infras) — loại.

Hệ quả

  • Được: audit trail rõ ràng (mỗi deploy = 1 commit trong repo này, trace ngược được về commit CI nào tạo ra); rollback = git revert đơn giản.
  • Đánh đổi: mỗi repo service cần cấu hình quyền ghi (PAT/App) vào repo gitops — thêm 1 secret cần quản lý per-repo; nếu CI push nhầm tag (race condition giữa nhiều PR merge gần nhau) có thể tạo commit deploy sai thứ tự, cần kiểm tra kỹ workflow concurrency.

Liên kết

  • Docs liên quan: README.md (mục "How It Works")
  • ADR liên quan: ADR-0001