10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CircleCI の Job の結果を Slack に通知する

Last updated at Posted at 2020-08-02

やりたいこと

CircleCI のJob の結果を Slack に通知することです。

こちらの記事を参考にさせていただきました。
[CircleCI Orbsで、jobの結果をslackに通知する]
(https://qiita.com/k_bobchin/items/11f0d778de09502de1f3#3-circleciconfigyml%E3%82%92%E8%A8%AD%E5%AE%9A)

記事の流れどおりで作成してみた備忘録のようなものになります。

Webhook URL の発行

CircleCI の対象のリポジトリから右上の「Project Settings」をクリックします。
qwerr.png

「Slack Integrations」を選択して、「Slack's CircleCI Integration page」のリンクをクリックします。
a.png

通知したいルームを選択して(下の画像の右上)、「Add to Slack」をクリックする。
b.png

通知するチャンネルを選択して、「Add CircleCI Integration」をクリックする。
c.png

URLが発行されるので確認して、一番下までスクロールして「Save Integration」をクリックする。
d.png
e.png

これでURLが発行されました。

Webhook URL の登録

先ほど表示したCircleCIの設定ページの「Add Webhook URL」をクリックします。
aa.png

発行されたWebhook URLをコピーして貼り付けます。ここでは自動的に「SLACK_WEBHOOK」という環境変数名で登録されます。
aaaa.png

Slack Ords の確認

「Add Slack Ord」をクリックします。
qwww.png

以下のような画面に遷移します。
12334.png

Slack Orb の使用の仕方が記述されているので、ここをみながら .circleci/config.yml の設定を行っていきます。

ちなみに Ords を使用すると .circleci/config.yml の記述量が減り、簡単に実装できるということなので、CircleCI 2.1 以上であれば積極的に使用した方がいいものらしいです。

.circleci/config.yml の設定

今回は以下のように設定ました。

version: 2.1

executors:
  default:
    working_directory: ~/workspace
    docker:
      - image: node:12

orbs:
  slack: circleci/slack@3.4.2

commands:
  restore_npm:
    steps:
      - restore_cache:
          name: Restore npm dependencies
          key: npm-{{ checksum "package.json" }}

  save_npm:
    steps:
      - save_cache:
          name: Cache npm dependencies
          key: npm-{{ checksum "package.json" }}
          paths:
            - ~/workspace/node_modules

jobs:
  build:
    executor: default
    steps:
      - checkout
      - restore_npm
      - run:
          name: Install dependencies
          command: npm install
      - run:
          name: Lint
          command: npm run lint
      - run:
          name: Build
          command: npm run build
      - run:
          name: Test
          command: npm run test:unit
      - save_npm

  deploy:
    executor: default
    steps:
      - checkout
      - restore_npm
      - run:
          name: Build
          command: npm run build
      - run:
          name: Check dist
          command: ls -la dist
      - run:
          name: Deploy to Firebase Hosting
          command: ./node_modules/.bin/firebase deploy --token=$FIREBASE_TOKEN
      - slack/status:
          success_message: ':ok:\nRepository: $CIRCLE_PROJECT_REPONAME\nBranch: $CIRCLE_BRANCH\nPull Requests: $CIRCLE_PULL_REQUESTS\nDeploy Success!'
          failure_message: ':ng:\nRepository: $CIRCLE_PROJECT_REPONAME\nBranch: $CIRCLE_BRANCH\nPull Requests: $CIRCLE_PULL_REQUESTS\nDeploy Failure!'
          webhook: "${SLACK_WEBHOOK}"

workflows:
  push-build:
    jobs:
      - build
      - deploy:
          requires:
            - build
          filters:
            branches:
              only: master

Orb の使い方は orbs:Orb名: 使用するOrb@タグ名 と記述して、 Job で Orb名/xxx と記述すれば Orb 側で定義してある xxx コマンドが実行できます。

また circleci/slack@3.4.2v で使えるコマンドは以下の通りです。

  • approval: Notify Slack about an awaiting approval job.
  • notify: Notify a Slack channel with a custom message.
  • status: Send a status alert at the end of a job based on success or failure. Must be the last step in a job.

今回は status を使用します。
status は Job が 成功 or 失敗 に応じてアラートを通知するコマンドです。

Slack の通知についての設定を抜粋すると以下のようになります。

# 省略

orbs:
  slack: circleci/slack@3.4.2

# 省略

jobs:
# 省略
  deploy:
    executor: default
    steps:
      - checkout
      - restore_npm
      - run:
          name: Build
          command: npm run build
      - run:
          name: Check dist
          command: ls -la dist
      - run:
          name: Deploy to Firebase Hosting
          command: ./node_modules/.bin/firebase deploy --token=$FIREBASE_TOKEN
      - slack/status:
          success_message: ':ok:\nRepository: $CIRCLE_PROJECT_REPONAME\nBranch: $CIRCLE_BRANCH\nPull Requests: $CIRCLE_PULL_REQUESTS\nDeploy Success!'
          failure_message: ':ng:\nRepository: $CIRCLE_PROJECT_REPONAME\nBranch: $CIRCLE_BRANCH\nPull Requests: $CIRCLE_PULL_REQUESTS\nDeploy Failure!'
          webhook: "${SLACK_WEBHOOK}"

# 省略

今回の場合は deploy の Job が 成功 or 失敗 に応じて - slack/status: 以下の success_message or failure_message で定義したメッセージが Slack に通知されます。

ちなみに、いろいろ実験した結果、- slack/status: の直前の Step でなくても、Job で定義された Step のどこか一箇所でも失敗していると failure_message が飛ぶようになっているみたいです。

実際に通知した例は以下のようになります。
1233444.png
出力する内容はプロジェクトの運用に合わせて設定してください。

以上になります。

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?