0
0

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 1 year has passed since last update.

[CircleCI]Slack通知時にあってほしい情報と取得方法

Last updated at Posted at 2024-02-13

概要

現在のプロジェクトで設定されているCircleCIからのSlack通知について、通知される情報がいろいろ不足していて一目で状況が把握しづらいと感じた。
「CircleCIからの通知で、一般的にさっさと知りたいであろう情報をリストアップ」するとともに、それらを「どう設定すれば通知できるのか」を調べてみた。

前提

  • Gitのホスティングサービス: GitHub
  • CircleCI: 2.1 (&Slack Orb使用)

ほしい情報と取得方法

ほしい情報 使えそうなパイプラインパラメータ、定義済み環境変数 の調査結果
ワークフロー名 なさそう(2023年時点. 参考: https://circleci.canny.io/cloud-feature-requests/p/expose-workflow-name-in-the-environment-variables)
ジョブ名 $CIRCLE_JOB
ブランチ $CIRCLE_BRANCH
コミット時のコメント pipeline.trigger_parameters.github_app.commit_title, pipeline.trigger_parameters.github_app.commit_messageらしいが、自身の環境ではエラーになり、使用できなかった(※)GitHub App使ってないから?
PRのURL(PRマージでパイプラインがトリガーされたとき) $CIRCLE_PULL_REQUESTが使えると思いきや、「リポジトリ自体をフォークした状態から元のリポジトリのブランチへPR出したとき」にしか使えないらしい。中身空っぽだった。
ワークフローの成否 なさそう。強いて言うなら「workflowの最後に成功通知用のジョブを実行、失敗時には通知しない」で表現する形か。
ジョブの成否 Slack Orbevent に任せられる
対象ワークフローのCircleCI WebアプリのURL $CIRCLE_BUILD_URL
PUSHでパイプラインが自動実行されたのか、CircleCIのWebアプリ上から手動実行したのか << pipeline.trigger_parameters.circleci.event_type >> らしいが、自身の環境ではエラーになり、取得できなかった(※)GitHub App使ってないから?
パイプライン実行をトリガーしたユーザー $CIRCLE_USERNAME

※Circle CIのWebアプリ上で以下のようなエラーが出力されていた

Unknown variable(s): event_type, commit_title

具体的な設定例

自身の環境で使えた以下の環境変数を使ってslack通知のテンプレートをcommandで定義しつつ、job失敗時・workflow完走時の通知で使用する例。

  • CIRCLE_USERNAME
  • CIRCLE_JOB
  • CIRCLE_BRANCH
  • CIRCLE_BUILD_URL
config.yml
commands:
  slack_notify:
    description: "Notify slack"
    parameters:
      event:
        type: enum
        enum: [fail, pass, always]
        default: always
      message:
        type: string
    steps:
      - slack/notify:
          event: << parameters.event >>
          custom: |
            {
              "blocks": [
                {
                  "type": "header",
                  "text": {
                    "type": "plain_text",
                    "text": "<< parameters.message >>",
                    "emoji": true
                  }
                },
                {
                  "type": "section",
                  "fields": [
                    {
                      "type": "mrkdwn",
                      "text": "*Branch*: $CIRCLE_BRANCH"
                    },
                    {
                      "type": "mrkdwn",
                      "text": "*User*: $CIRCLE_USERNAME"
                    }
                  ]
                },
                {
                  "type": "actions",
                  "elements": [
                    {
                      "type": "button",
                      "text": {
                        "type": "plain_text",
                        "text": "View Job"
                      },
                      "url": "${CIRCLE_BUILD_URL}"
                    }
                  ]
                }
              ]
            }

jobs:
  sample_job1:
    ...
    steps:
      ...
      - slack_notify # 失敗時の通知処理を末尾に書いておく
          event: fail
          message: "Job:${CIRCLE_JOB} failure"
  sample_job2:
    ...
    steps:
      ...
      - slack_notify # 失敗時の通知処理を末尾に書いておく
          event: fail
          message: "Job:${CIRCLE_JOB} failure"
  # workflow完走時の通知
  notify_workflow_succeeded:
    parameters:
      workflow_name:
        type: string
        default: ""
    docker:
      - image: cimg/base:stable
    steps:
      - slack_notify:
          message: "Workflow:<< parameter.workflow_name >> Successful"

workflows:
  sample_workflow1:
    jobs:
      - sample_job1
      - sample_job2
      - notify_workflow_succeeded:
          workflow_name: "sample_workflow1" # ワークフロー名を教えてあげる
          requires:
            - sample_job1
            - sample_job2

参考

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?