Otomasi update image container dengan ArgoCD Image Updater: strategi semver, latest, dan digest, write-back ke Git, serta pola dev otomatis hingga approval manual di produksi.

Di episode 15 sebelumnya kita membangun workflow promosi berbasis Git dan tag. Tapi ada mata rantai yang masih manual: siapa yang mengubah versi image di manifest? CI/CD bisa membangun image baru, tapi masih butuh tangan manusia untuk mengetik v1.2.4 di kustomization atau values Helm, membuat PR, dan menunggu review. Pada episode ini kita membahas ArgoCD Image Updater — kontroller yang memeriksa registry, mendeteksi image baru, dan memperbarui manifest secara otomatis, sambil tetap menghormati alur GitOps.
Mengapa ini penting? GitOps bukan berarti "semua harus manual". Image Updater adalah jembatan yang membuat CI push ke registry terhubung dengan ArgoCD pull dari Git — siklus otomatis yang utuh dari commit kode hingga deploy. Yang lebih penting, ia bisa disetel berbeda per environment: otomatis penuh di dev, terkontrol di staging, dan menunggu approval di production.
Image Updater berjalan sebagai Deployment terpisah di namespace argocd. Instalasi termudah dengan Helm:
helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd-image-updater -n argocd \
argocd/argocd-image-updater
kubectl rollout status deploy/argocd-image-updater -n argocdKonfigurasi kredensial registry diletakkan di Secret argocd-image-updater-secret, sementara pengaturan global (misal default registries) di ConfigMap argocd-image-updater-config.
Kontroller memindai semua Application setiap interval (default 2 menit), mencari annotation tertentu. Jika ditemukan, ia:
Karena prosesnya dimulai dari membaca annotation pada Application, tidak ada perubahan kode aplikasi yang diperlukan — Image Updater murni bekerja di lapisan manifest.
Semua perilaku per aplikasi diatur lewat annotation pada Application:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: billing-api
namespace: argocd
annotations:
argocd-image-updater.argoproj.io/image-list: |
api=ghcr.io/devnull/billing-api
web=ghcr.io/devnull/web
argocd-image-updater.argoproj.io/api.update-strategy: semver
argocd-image-updater.argoproj.io/api.allow-tags: regexp:^v?[0-9]+\.[0-9]+\.[0-9]+$
argocd-image-updater.argoproj.io/web.update-strategy: digest
spec:
project: default
source:
repoURL: https://github.com/devnull/gitops-repo.git
path: apps/billing/overlays/prod
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: billing-prodimage-list mendaftarkan image yang dipantau, dengan alias per image (api, web).api.update-strategy dan api.allow-tags.Note
Pola annotation adalah <alias>.update-strategy, <alias>.allow-tags, dan seterusnya. Jika lupa menambahkan alias di image-list, annotation untuk image tersebut tidak akan pernah dibaca — cek kembali nama aliasnya saat konfigurasi tidak berfungsi.
Empat strategi yang tersedia:
| Strategi | Pemilihan tag | Kapan dipakai |
|---|---|---|
semver | Tag semver tertinggi (mengikuti aturan semver) | Rilis yang versioned |
latest | Tag paling baru (sorting string/tanggal) | Dev/eksperimen |
digest | SHA digest image saat ini | Pinning reproducible |
name | Urutan nama tag (lexicographic) | Tag berformat khusus |
Strategi semver adalah pilihan paling aman untuk production: hanya tag yang memenuhi allow-tags yang dipertimbangkan, sehingga tag aneh seperti canary-abc tidak pernah terpilih.
Bagaimana Image Updater menulis hasilnya kembali:
Metode paling GitOps: kontroller melakukan commit ke repository manifest dengan pesan seperti chore: updated billing-api image v1.2.3. Perubahan itu terview, ter-audit, dan bisa di-rollback lewat revert — persis alur episode 15. Butuh kredensial commit di Secret argocd-image-updater-secret.
Metode alternatif: Image Updater mengubah parameter image langsung pada Application (setara argocd app set --helm-set image.tag=v1.2.3). Lebih sederhana karena tidak butuh akses Git, tapi perubahan tidak tercatat di Git — trade-off yang mengurangi benefit audit GitOps. Gunakan hanya jika write-back ke Git tidak memungkinkan.
annotations:
argocd-image-updater.argoproj.io/image-list: |
api=ghcr.io/devnull/billing-api
argocd-image-updater.argoproj.io/api.update-strategy: semver
argocd-image-updater.argoproj.io/api.write-back-method: git
argocd-image-updater.argoproj.io/api.git-branch: mainKekuatan Image Updater ada pada kebijakan berbeda per environment:
update-strategy: latest + write-back-method: argocd → setiap push ke registry langsung me-sync dev. Tanpa review, sesuai sifat environment development.semver dengan allow-tags ketat, write-back ke Git pada branch staging; perubahan tampil sebagai commit yang bisa direview ringan.Tip
Aturan emasnya: semakin tinggi environment, semakin manual approval-nya. Otomasi penuh di production menghilangkan satu lapisan keamanan yang dibutuhkan tim operasional. Image Updater menyediakan fleksibilitas itu — bukan kewajiban untuk otomatis di mana-mana.
Alur end-to-end yang ideal:
Dengan begitu rantai "commit kode → image baru → manifest baru → deploy" menjadi tanpa intervensi tangan di environment rendah, dan tetap terview di environment tinggi.
latest) mudah menghasilkan "deploy tak terduga".update-strategy: digest agar image yang di-deploy selalu reproducible dan kebal terhadap tag yang ditimpa ulang.main/prod dengan required reviews; commit otomatis dari Image Updater harus tetap melewati CI checks.Warning
Jika write-back-method: git dipakai, Image Updater butuh hak commit ke repository manifest. Pastikan akun yang dipakai adalah akun terbatas (misal bot), dan branch yang dilindungi tetap memaksa review untuk perubahan berbahaya.
latest di production. Sulit di-rollback dan tidak reproducible. Gunakan semver atau digest.image-list harus persis sama dengan prefix annotation api.update-strategy.Episode ini menutup mata rantai otomasi: instalasi Image Updater dengan Helm, cara kerja kontroller yang memindai annotation, strategi update semver/latest/digest/name, dua metode write-back (Git vs ArgoCD), pola otomasi per environment dari dev otomatis hingga production dengan approval, integrasi dengan CI, serta praktik terbaik semver, digest pinning, dan branch protection.
Poin yang harus kalian bawa:
update-strategy: semver adalah pilihan paling aman untuk rilis.image-list dan alias adalah kunci seluruh konfigurasi.Otomasi yang baik harus terlihat — tim perlu tahu kapan deploy sukses, gagal, atau menunggu. Di episode 17 selanjutnya kita membahas Notifications & Alerts: argocd-notifications, trigger dan template, subscription ke Slack/Teams/email/webhook, serta pola notifikasi deploy, failure alert, dan audit trail. Sampai jumpa di episode 17!