概要
現在のプロジェクトで設定されている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 Orb のevent に任せられる |
対象ワークフローの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
参考