【ArgoCD Notifications】ArgoCDでSlackに通知を送ってみた

2023/01/16に公開約3,500字

内容

ArgoCDの通知機能を提供するArgoCD Notifications ( https://argocd-notifications.readthedocs.io/en/stable/ )を使って、ArgoCDからSlackに通知を送る方法を解説します。
基本的には、公式通りの内容ですが、公式のドキュメントが一部古くなっていたり、はまったポイントもあったので、それらを踏まえた内容を紹介します。

Installation

ArgoCD Notificationに必要なresourcesをinstallします。
※事前にArgoCDのinstallは完了させておいてください。また、最新のArgoCDをinstallすると、Notificationも一緒にinstallされている可能性があります。

$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.0/manifests/install.yaml
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.0/catalog/install.yaml

※HelmやKustomizeを使って、installしたい方は、( https://argocd-notifications.readthedocs.io/en/stable/ )こちらからinstallをしてください。

Slack Configuration

Slack通知を有効化するために、Slack側でOAuth Tokenを発行します。

Oauth Tokenを発行する

  • https://api.slack.com/apps?new_app=1 にアクセスし、Slack Appを通知を送りたいSlack Workspaceと連携する形で作成
  • サイドバーから OAuth & Permissions を選択
  • Add an OAuth Scope ボタンをクリック
  • chat:write を選択する
    • ArgoCD
  • サイドバーから Install App を選択
  • Install to Workspace ボタンをクリック
  • OAuth Tokenが発行されるのでその値をメモしておく
    • 後ほど、Secretに登録します

Slack Channelを作成し、作成したAppを登録する

次に、連携したSlack WorkSpaceで通知を送りたいSlack Channelを作成し、Integrationから作成したSlackAppをそのチャンネルに登録してください。
※私は、このIntegrationにAppを登録する作業を忘れてしまい、トラブルシュートに時間がかかってしまいました。。。

SecretにOAuth Tokenを登録する

取得したOAuth TokenをKubernetesのSecretに登録します。

secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: argocd-notifications-secret
  namespace: argocd
stringData:
  slack-token: <先ほど取得したOAuthToken>
$ kubectl apply -f secret.yaml

登録したSecretをConfigMapから呼び出す

最後に、先ほど登録したSecretをConfigMapから呼び出します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
  namespace: argocd
data:
  service.slack: |
    token: $slack-token

という形で、argocd-notifications-cm に値を追加して下さい。
この argocd-notifications-cm は、Installationの欄でinstallした、 https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.0/catalog/install.yaml ファイルで定義されています(通知のテンプレートが既に定義されている)。

そのため、

  • Kustomizeのパッチを使って値を上書き
  • ファイルをinstallしてきてファイル編集してapply
  • kubectl editコマンドでkubernetes上のリソースを直接編集

等の方法で、tokenを追加してください。

通知を送りたい条件を決める

今までのフローで、ArgoCDからSlackに通知を送る ことができるようになりました。
最後に通知をトリガーする条件をArgoCDのApplicationリソースに追加します。

syncが成功した時に通知をトリガーする

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: test-app
  annotations:
    notifications.argoproj.io/subscribe.on-sync-succeeded.slack: SlackChannelName

test-appアプリケーションのSyncが成功した際に通知を送る例です。
上記annotationを追加後に、test-appで管理しているmanifestファイルを更新してみましょう。しばらくすると、ArgoCDがファイルをSyncし、正常動作が完了したら、Slackに通知が送信されます。

Tips

初期設定のままだと、.context.argocdUrl の値が設定されていないため、Slack通知のメッセージに <no value> と表示されてしまいます。

そのため、

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
data:
  context: |
    argocdUrl: "https://example.com/argocd"

といった具合に、ArgoCD UIのURLをConfigMapに設定すると、Slack上にArgoCD管理画面へのリンクが表示されて便利になります!

トラブルシュート

もし、上記フローにて実装したにもかかわらず、正常に通知が送信されない場合は、notification-controllerのlogを参照してください。

$ kubectl logs <argocd-notifications-controller-pod-name> -n argocd

※Slackに通知を送る処理が実行されているかどうかを確認できます。処理自体が実行されている場合は、Slackからエラーコードも返ってくるため、トラブルシュートが可能です。

参照・引用・参考

ArgoCD Notification

https://argocd-notifications.readthedocs.io/en/stable/

GitOps Guide to the Galaxy (E38) | Exploring Argo Notifications

https://www.youtube.com/watch?v=u3yPgg2yAYk

Discussion

ログインするとコメントできます