【ArgoCD Notifications】ArgoCDでSlackに通知を送ってみた
内容
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
を選択する - サイドバーから
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
GitOps Guide to the Galaxy (E38) | Exploring Argo Notifications
note
勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。
Discussion