Carpe Diem

備忘録

CircleCIでのslack連携 (Slackアプリ版)

背景

以前CircleCIの新UI後のslack連携を書きました。

今見るとまたやり方が変わっている(Webhook URL→Slackアプリ)ので、やり方を説明します。

環境

手順

大きく3ステップあります。

  1. Slackアプリを作る
  2. CircleCIのContexts or プロジェクトの環境変数トークンを設定
  3. Orbで↑を使う

1. Slackアプリを作る

Setup · CircleCI-Public/slack-orb Wiki · GitHub

に沿って進めばOKです。

https://api.slack.com/apps

からCreate New Appで新しいアプリを作ります。

f:id:quoll00:20210510060539p:plain

左メニューでOAuth & Permissionsを選択し

f:id:quoll00:20210510060653p:plain

ScopesBot Token Scopesの方で

f:id:quoll00:20210510060837p:plain

以下の権限を付与します。

権限 目的
chat:write このアプリを追加したチャンネルでメッセージを投稿するため
chat:write.public このアプリをチャンネルに追加してなくてもメッセージを投稿できるように
アプリをチャンネル追加していれば不要?
files:write ファイルアップロードのため(まだ未使用?)

こんな状態になります。

f:id:quoll00:20210510061655p:plain

権限を設定したらOAuth Tokens for Your Workspaceトークンを発行します。

f:id:quoll00:20210510062041p:plain

発行されました。

f:id:quoll00:20210510091310p:plain

2. CircleCIのContextsの環境変数トークンを設定

Contextsを使って各プロジェクトでこのSlackアプリを使えるようにします。

設定する環境変数は以下です。

環境変数 説明
SLACK_ACCESS_TOKEN 先程生成したSlackアプリのトーク
SLACK_DEFAULT_CHANNEL 送信するチャンネルが指定されていない時のデフォルトチャンネル

f:id:quoll00:20210510094859p:plain

例としてSLACKという名前のContextsを用意してみましたが、このように2つ設定された状態になります。

f:id:quoll00:20210510095339p:plain

3. Orbで↑を使う

まずはorbの指定をします。

orbs:
  slack: circleci/slack@4.4.2

次にorbで参照している環境変数を読み込めるよう、各jobでcontextの設定をします。

workflows:
  build_and_notify:
    jobs:
      - build:
          context:
            - SLACK

v4からはメッセージのテンプレートが用意さているので、以下のように指定するだけで最低限の通知を送ることができます。

失敗時

- slack/notify:
    channel: ABCXYZ
    event: fail
    template: basic_fail_1

channelはoptionalで、未指定の場合はSLACK_DEFAULT_CHANNELで設定したチャンネルになります。

成功時

- slack/notify:
    channel: ABCXYZ
    event: pass
    template: basic_success_1

tag切ったとき

- slack/notify:
    channel: ABCXYZ
    event: pass
    template: success_tagged_deploy_1

その他詳細な設定

christina04.hatenablog.com

の後半のTipsを参考にしてください。

ソース