Argo CD NotificationsでSlackに通知をしてみる

はじめに

  • argocd notificationsに興味があったので構築手順をブログに残します

対象

  • argocd-notificationsを触ってみたいが、開発環境の構築方法がわからない人
  • 手元の環境でargocd-notificationsを触ってみたい人

目標

guestbookアプリをSyncしたときSlackに通知される

f:id:kntks:20210822095907p:plain

前提

  • docker, kind, kustomizationがインストールされている

前準備

ディレクトリ構成は下の記事で紹介したここと同じものを準備します

全てコピーしてくるとディレクトリは以下のようになっていると思います
ktbbrk.hatenablog.com

※ 使わないディレクトリは削除しています

$ tree
.
└── manifests
    └── argocd
        ├── base
        │   ├── kustomization.yaml
        │   └── namespace.yaml
        └── overlays
            └── development
                ├── apps
                │   └── guestbook.yaml
                └── kustomization.yaml

Argo CDを立ち上げる

$ kustomize build manifests/argocd/overlays/development | k apply -f -

$ k -n argocd get secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d

$ k port-forward svc/argocd-server -n argocd 8080:443

http://localhost:8080 にアクセスします

guestbookのApplicationを作成する

$  k apply -f manifests/argocd/overlays/development/apps/guestbook.yaml

前準備を全て行うと以下の画像のようになっているはずです

f:id:kntks:20210822152443p:plain

Slackでappを作成する

以下のサイトにApp作成の手順が書いてあるので、1 ~ 5までを行ってください

argocd-notifications.readthedocs.io

tokenが取得できるのでどこかにメモしておきましょう

Secretを作成する

slackからtokenを取得したらSecretを作成します

manifests/argocd/base/argocd-notifications-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: argocd-notifications-secret
stringData:
  slack-token: xoxb-xxxxxxxx

ConfigMapを作成する

以下のコマンドでTriggerとTemplateの設定をダウンロードします

curl -o  manifests/argocd/base/argocd-notifications-cm.yaml  https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/v1.1.1/catalog/install.yaml

argocd-notifications-cm.yamlを編集します

data:
  # 以下を追加
  service.slack: |
    token: $slack-token

# ~~  省略  ~~~~

kustomization.yamlを編集する

manifests/argocd/base/kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: argocd
resources:
- https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/v1.1.1/manifests/install.yaml
- ./namespace.yaml

patchesStrategicMerge:
- ./argocd-notifications-secret.yaml
- ./argocd-notifications-cm.yaml

ディレクトリの確認

 $ tree
.
└── manifests
    └── argocd
        ├── base
        │   ├── argocd-notifications-cm.yaml
        │   ├── argocd-notifications-secret.yaml
        │   ├── kustomization.yaml
        │   └── namespace.yaml
        └── overlays
            └── development
                ├── apps
                │   └── guestbook.yaml
                └── kustomization.yaml

argocd-notificationのインストールと一緒にkustomize buildする

$ kustomize build manifests/argocd/overlays/development/ | k apply -f -

Argo CDのApplicationにannotationをつける

今回slackのチャンネル名は generalを指定します

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
  # 以下のannotatioinsを追加
  annotations:
    notifications.argoproj.io/subscribe.on-sync-succeeded.slack: general
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    server: https://kubernetes.default.svc
    namespace: default

結果を反映する

$ k apply -f manifests/argocd/overlays/development/apps/guestbook.yaml

Slackに通知する

Syncボタンを押してみましょう f:id:kntks:20210822194052p:plain

Slackから通知が来ると思います f:id:kntks:20210822200513p:plain

ログを確認する

argocd-notifications-controller-xxxの名前を探す

$ k -n argocd get pod
NAME                                               READY   STATUS    RESTARTS   AGE
argocd-application-controller-0                    1/1     Running   0          4h54m
argocd-dex-server-68c7bf5fdd-qvqnx                 1/1     Running   0          4h54m
argocd-notifications-controller-7df59c88f8-sct8s   1/1     Running   0          43m

$ k -n argocd logs -f argocd-notifications-controller-7df59c88f8-sct8s

controllerに登録したTemplateを確認する

もしslackに通知が来ない場合はTemplateが登録されていない可能性がある

$ k exec -it -n argocd argocd-notifications-controller-7df59c88f8-sct8s  -- /app/argocd-notifications trigger get

最後に

今回使用したコードはここにまとめています

参考

Argo CD Notifications

Slack - Argo CD Notifications

Troubleshooting - Argo CD Notifications