もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

circleciのslack通知が知らない間に新しくなっていた

はじめに

こんばんは。

最近 circleci のslack通知が新しくなっていたのを知りました。

設定ファイルとか全然いじってなかったので知りませんでした。。。

公式サイトによるとSlack Orbなるものを使うみたいです。

circleci.com

早速やってみます。

本題

初期設定

1. circleci側設定

とりあえずサンプルの laravelプロジェクトをcircleciに追加します。

追加すると circleci-project-setup というブランチが出来て一発目が回ります。

該当ブランチには circleciの設定ファイルが .circleci/config.yml 追加されてます。

# Use the latest 2.1 version of CircleCI pipeline process engine.
# See: https://circleci.com/docs/2.0/configuration-reference
version: 2.1

# Define a job to be invoked later in a workflow.
# See: https://circleci.com/docs/2.0/configuration-reference/#jobs
jobs:
  say-hello:
    # Specify the execution environment. You can specify an image from Dockerhub or use one of our Convenience Images from CircleCI's Developer Hub.
    # See: https://circleci.com/docs/2.0/configuration-reference/#docker-machine-macos-windows-executor
    docker:
      - image: cimg/base:stable
    # Add steps to the job
    # See: https://circleci.com/docs/2.0/configuration-reference/#steps
    steps:
      - checkout
      - run:
          name: "Say hello"
          command: "echo Hello, World!"

# Invoke jobs via workflows
# See: https://circleci.com/docs/2.0/configuration-reference/#workflows
workflows:
  say-hello-workflow:
    jobs:
      - say-hello

2. slack app作成

slack通知のために諸々設定します。 解説してくれているページがあったのでこちら見ればそこまで迷わないです。

github.com

上記の設定ができたあとは、 サイドバーの OAuth & Permisions を選択して、下記設定を行います。

その後は サイトバーの Install App を選択してアプリをワークスペースへインストールします。

インストールすると tokenが発行されます。

3. circleciに設定を追加

次は circleci側の設定でtokenと通知するチャンネルを登録します。

先程追加された config.ymlを以下のように修正してjobを回してみます。

version: 2.1

orbs:
  slack: circleci/slack@4.10.1

jobs:
  say-hello:
    docker:
      - image: cimg/base:stable
    steps:
      - checkout
      - run:
          name: "Say hello"
          command: "echo Hello, World!"
      - slack/notify:
          event: fail
          template: basic_fail_1
      - slack/notify:
          event: pass
          template: basic_success_1

workflows:
  say-hello-workflow:
    jobs:
      - say-hello

絶対に成功するので、successで通知が来ました!

一歩進んで見る

毎回通知するのは個人的にだるいので、基本的には fail 通知だけにして、特定のブランチに関しては successとfailの通知が飛ぶようにしたいです。

公式見ると branch_pattern ってやつを使えば行けそうでしたので、やってみます。

circleci.com

      - slack/notify:
          event: pass
          branch_pattern: develop,main ← こちらを追加
          template: basic_success_1

これで 先程出来た circleci-project-setup というブランチでpushしてciが回って成功しても通知が来なくなりました。

circleci-project-setup で failが来ることを確認してみます。

config.ymlを以下みたいに修正します。

      - run:
          name: "Say hello"
          command: "echo Hello, World! && exit 1" ←こんな感じで変更

来ましたー!

最後に、mainとdevelopだけsuccessが来るように設定したので、その設定が生きているかを確認します。

問題なく来ました。

さらにもう一歩進んで見る

通知が来たときにメンションが飛ばせるみたいです。

例えば重要な develop, main のブランチの失敗のみ @here でメンションをつけて、それ以外のブランチの失敗はメンションをつけないとかやってみたいです。

      # こちらを追加
      - slack/notify:
          event: fail
          branch_pattern: develop,main
          mentions: "@here"
          template: basic_fail_1

develop, mainブランチではメンションがついて、それ以外のブランチではメンションがつかないことを確認できました。

終わりに

すごく簡単に設定できて、かつカスタムも結構効く感じでした。

もう過去の設定方法は完全に忘れているので新鮮にやりやすいと感じてました...w

複数のチャンネルに通知したり、通知のテンプレートをカスタムしたりもできるので、やろうと思えばもっと作り込めそうです。

現場からは以上です。