Belajar GitOps dengan ArgoCD - Notifications & Alerts
Episode 17 of 36

Belajar GitOps dengan ArgoCD - Notifications & Alerts

Pantaunya lebih cepat dengan argocd-notifications: kirim notifikasi sync, health, dan kegagalan ke Slack, Teams, email, atau webhook lewat trigger, template, dan subscription.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Di episode 16 sebelumnya kita mengotomasi update image — dan otomasi menimbulkan kebutuhan baru: tahu apa yang terjadi. Ketika Image Updater mengubah tag di malam hari, siapa yang tahu? Ketika sync gagal di production, siapa yang di-page? Jawabannya ada di argocd-notifications: sistem notifikasi bawaan ArgoCD yang mengirim pesan ke Slack, Teams, email, webhook, hingga status GitHub/GitLab — semua dikonfigurasi lewat YAML di Git.

Mengapa ini penting? Deploy yang tidak terlihat adalah sumber kecemasan terbesar tim operasional. Notifikasi yang tepat mengubah peran tim dari "menebak-nebak apakah deploy sukses" menjadi "menunggu informasi yang pasti". Lebih dari itu, notifikasi adalah lapisan pertama observability — yang akan kita lengkapi dengan metrik dan logging di episode 22.

Instalasi & Konfigurasi

Sejak ArgoCD v2.4, notifikasi sudah terintegrasi ke dalam application controller — tidak perlu binary terpisah. Semua konfigurasi hidup di dua objek:

  • ConfigMap argocd-notifications-cm — berisi trigger, template, service, dan subscription.
  • Secret argocd-notifications-secret — berisi token/kredensial channel.

Arsitekturnya tiga konsep inti:

KonsepFungsi
TriggerKondisi yang menentukan kapan notifikasi dikirim
TemplateFormat pesan yang menentukan apa yang dikirim
SubscriptionPengikat trigger + template ke channel tertentu

Triggers

Trigger adalah kondisi (dievaluasi dari status Application) yang memicu notifikasi. Contoh bawaan: on-sync-succeeded, on-sync-failed, on-health-degraded. Definisi trigger:

Trigger custom
trigger.on-sync-succeeded: |
  - when: app.status.sync.status in ('Synced')
    send: [app-sync-succeeded]
trigger.on-deploy-failed: |
  - when: app.status.health.status in ('Degraded') and app.status.sync.status in ('OutOfSync')
    send: [deploy-failed]

Field when memakai ekspresi (bisa berisi logika AND/OR), dan send merujuk nama template yang akan dipakai.

Note

Kondisi trigger dibaca dari status Application — untuk menguji ekspresi yang rumit, gunakan argocd app get <nama> dulu untuk melihat nilai status.sync.status dan status.health.status yang sebenarnya.

Templates

Template mendefinisikan isi pesan. Bisa memakai variabel dari Application dan kondisional:

Template pesan
template.app-sync-succeeded: |
  message: |
    ✅ Application {{.app.metadata.name}} berhasil di-sync.
    Environment: {{.app.spec.destination.namespace}}
  slack:
    attachments: |
      [{ "color": "#2eb886", "title": "Deploy sukses" }]
template.deploy-failed: |
  message: |
    ⚠️ Deploy {{.app.metadata.name}} GAGAL!
    Sync: {{.app.status.sync.status}} | Health: {{.app.status.health.status}}

Variabel seperti app.metadata.name diisi dari object Application; blok if/else memungkinkan pesan berubah sesuai kondisi (misal menampilkan namespace hanya jika ada). Pesan bisa berformat teks biasa atau attachment kaya untuk Slack/Teams.

Warning

Template memakai sintaks Go template dengan kurung kurawal ganda — dan hanya valid di dalam ConfigMap (YAML). Jangan pernah menulis ekspresi seperti app.metadata.name yang dibungkus kurung kurawal ganda di teks narasi biasa karena akan diinterpolasi secara keliru.

Subscriptions

Subscription menentukan siapa menerima notifikasi apa. Dua cara:

Subscription Global di ConfigMap

Subscription global
subscriptions: |
  - recipients:
      - slack:deployments
    triggers:
      - on-sync-succeeded
      - on-sync-failed
  - recipients:
      - email:ops@company.com
    triggers:
      - on-health-degraded

Per-Aplikasi via Annotation

ArgoCDSubscription per aplikasi
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: billing-api
  namespace: argocd
  annotations:
    notifications.argoproj.io/subscribe.on-sync-succeeded.slack: deployments
    notifications.argoproj.io/subscribe.on-sync-failed.email: ops@company.com

Pola annotation-nya: notifications.argoproj.io/subscribe.<trigger>.<service>: <recipient>. Ini memberi kontrol granular — aplikasi kritikal bisa mengirim ke channel berbeda.

Channel: Services

Koneksi ke kanal dikonfigurasi sebagai service di ConfigMap, dan token disimpan di Secret:

Service Slack
service.slack: |
  token: $slack-token
service.webhook: |
  url: https://hooks.example.com/gitops
KubernetesSecret untuk notifikasi
apiVersion: v1
kind: Secret
metadata:
  name: argocd-notifications-secret
  namespace: argocd
stringData:
  slack-token: xoxb-XXXX-YYYY

Channel yang didukung out of the box:

ServicePenerimaKhasiat
Slackslack:<channel>Notifikasi tim, cepat dan kaya format
Microsoft Teamsteams:<webhook>Integrasi enterprise
Email (SMTP)email:<alamat>Arsip formal, audit
Webhookwebhook:<url>Integrasi custom/API internal
GitHub/GitLabCommit statusStatus deploy di halaman PR

Service GitHub/GitLab (service.github-commit-status) memasang status pada commit — sangat berguna: review PR langsung melihat tanda deploy sukses/gagal tanpa buka ArgoCD.

Use Case

  • Deploy notifications — trigger on-sync-succeeded memberi kepastian ke tim bahwa perubahan sudah live.
  • Failure alerts — trigger on-sync-failed/on-health-degraded mengarahkan on-call ke aplikasi bermasalah lebih awal daripada menunggu user report.
  • Approval requests — untuk environment production, kombinasi sync windows (episode 14) + notifikasi memberi tahu reviewer bahwa ada perubahan menunggu diizinkan.
  • Audit trail — karena setiap event tercatat di channel/email, tim punya jejak operasional di luar Git — pelengkap jejak commit untuk compliance.

Testing Notifikasi

Sebelum menyebar ke banyak channel, uji dengan CLI:

Uji trigger notifikasi
argocd notify trigger billing-api on-sync-succeeded
argocd notify trigger billing-api on-deploy-failed
argocd notify broadcast "Test broadcast"

argocd notify trigger menjalankan trigger secara paksa untuk aplikasi tertentu — cara paling cepat memverifikasi template dan koneksi channel tanpa menunggu event nyata.

Kesalahan Umum (Common Pitfalls)

  1. Token di ConfigMap, bukan Secret. Token channel harus di Secret (argocd-notifications-secret); ConfigMap hanya menampung referensi seperti $slack-token.
  2. Subscription global terlalu berisik. Semua aplikasi mengirim ke satu channel = noise. Manfaatkan annotation per aplikasi untuk mengendalikan volume.
  3. Template salah variabel. Nama field ArgoCD (misal status.health.status) harus persis; kesalahan kecil menghasilkan pesan kosong. Uji dengan argocd notify trigger.
  4. Lupa me-restart controller. Setelah mengubah ConfigMap, controller perlu reload agar konfigurasi baru terbaca.
  5. Tidak memfilter trigger. Trigger yang terlalu luas (misal semua sync termasuk dev) membanjiri channel; batasi dengan kondisi when yang spesifik.

Penutup

Episode ini menutup lingkaran otomasi GitOps dengan observabilitas manusia: arsitektur trigger/template/subscription, konfigurasi di ConfigMap dan Secret, channel Slack/Teams/email/webhook/commit-status, trigger berdasarkan sync dan health, template dengan variabel dan kondisional, serta use case dari notifikasi deploy hingga audit trail.

Poin yang harus kalian bawa:

  • Notifikasi terintegrasi di application controller sejak ArgoCD v2.4.
  • Trigger menentukan kapan, template menentukan apa, subscription menentukan kepada siapa.
  • Subscription per-aplikasi via annotation memberikan kontrol granular.
  • Simpan token di Secret, bukan ConfigMap.
  • Selalu uji dengan argocd notify trigger sebelum menyebar konfigurasi.

Notifikasi memberi tahu kita bahwa sesuatu terjadi — tapi bagaimana event itu lahir di CI/CD? Di episode 18 selanjutnya kita merangkai semuanya dalam CI/CD Pipeline Integration: GitHub Actions, GitLab CI/CD, dan Jenkins yang membangun image, memperbarui manifest, dan menyerahkan sisanya ke ArgoCD. Sampai jumpa di episode 18!

Belajar GitOps dengan ArgoCD - Notifications & Alerts | Belajar GitOps dengan ArgoCD