CircleCI のジョブ結果を Slack に通知する場合,今までは CircleCI の Webhook と Slack の Incoming WebHooks を組み合わせて実現していた.最近読んでいる「CircleCI 実践入門」に「Slack Orb」を使う方法が載っていたので,プライベートで使っている GitHub リポジトリの通知を移行することにした.実際に「Slack Orb」で試した内容を整理しておきたいと思う.なお「CircleCI 実践入門」の書評記事は別途書く.
- CircleCI Orb Registry - circleci/slack
- GitHub - CircleCI-Public/slack-orb: Create custom Slack notifications for CircleCI job statuses
「Slack Orb」を試す
まず,CircleCI の Project Settings で Slack Integration を選択して,Webhook URL を登録しておく.
次に .circleci/config.yml
に「Slack Orb」の設定を追加する.ポイントは version
を 2.1
にしておくことと,orbs
の設定をしておくこと.そして今回は「Slack Orb」の slack/status
コマンドを使う.今回は以下のように exit
をするサンプルを用意した.
version: 2.1 orbs: slack: circleci/slack@3.4.2 jobs: hello: docker: - image: cimg/base:stable steps: - checkout - run: exit 0 - slack/status workflows: version: 2 ci: jobs: - hello
exit 0
と exit 1
を使って実行すると,以下のように「成功」も「失敗」も Slack に通知できるようになった.簡単!
fail_only
パラメータを追加する
実運用を考えると,ジョブが「失敗」したときに通知できれば十分だと思う.その場合は slack/status
コマンドに fail_only
パラメータを追加する.true
を設定すると「失敗」したときに通知できるようになる.ドキュメントを読むと,他にもパラメータは多くある.
(中略) jobs: hello: docker: - image: cimg/base:stable steps: - checkout - run: exit 1 - slack/status fail_only: true (中略)
「Slack Orb」コマンド slack/notify
ドキュメントを読むと「Slack Orb」には slack/status
以外にもコマンドが用意されている.特に任意の値を通知できる slack/notify
コマンドは使える場面が多くあると思う.
slack/approval
slack/notify
slack/notify-on-failure
slack/status
以下のサンプルのように slack/notify
コマンドを使える.今回はパラメータとして title
と message
と mentions
を設定した.他にも color
や image_url
など,パラメータは多くある.
(中略) jobs: htmllint: docker: - image: cimg/base:stable steps: - checkout - run: exit 0 - slack/notify: title: 🚨 message: アプリケーションエラー⚡ mentions: kakakakakku (中略)
実行すると,以下のように任意の値を通知できるようになった.簡単!
疑問 1 : Alpine
Alpine で作った Docker イメージを CircleCI のジョブで使う場合,slack/status
コマンドを実行するときに Bash と curl
がなく,エラーになってしまう.ワークアラウンドとして .circleci/config.yml
の中で run: apk add bash curl
を追加して,一時的に Bash と curl
をインストールすることにより,問題なく使えるようになった.Alpine を使う場面は多いと思うし,覚えておくと良さそう.
#!/bin/sh -eo pipefail if [ ! -x /bin/bash ]; then echo Bash not installed. exit 1 fi
疑問 2 : when
パラメータ
「CircleCI 実践入門」で slack/notify
コマンドと when
パラメータを組み合わせた例が紹介されていた.実際に試したところ Build Error になってしまった.確かに CircleCI の設定に when
パラメータは存在するけど,slack/notify
コマンドと組み合わせられる?
steps: - slack/notify: message: デプロイ失敗 when: on_fail
まとめ
「Slack Orb」を使って,CircleCI のジョブ結果を Slack に通知できるようにした.今後もどんどん使っていこうと思う.Alpine で作った Docker イメージを CircleCI のジョブで使っている場合はワークアラウンドも必要になる.「CircleCI 実践入門」は本当に良書だと思う.書評記事は今週公開する予定!