今年の春くらいに CircleCI の UI が新しくなったタイミングで、各プロジェクトで設定した Slack 通知用の設定ページはどこかにいってしまいました。
こんな画面でした。
各プロジェクトの設定ページによると、現在は Slack orb を使う必要があるそう。
例: https://app.circleci.com/settings/project/github/masutaka/example/slack
それはまあ移行すれば良いのですが、旧 UI で設定した Slack の Webhook URL を確認したくても出来ません。Slack orb に移行した場合に、旧 UI で設定した通知を無効にしてくれるのかも気になります。
CircleCI のサポートに聞いたところ、残念ながらそのような UI は用意されておらず、Slack orb に移行しても自動的な無効化はしてくれないそう。
マジすか・・・!
Undocumented API を使って無効化が必要とのこと。新 UI では確認も変更も削除もできないとのこと。それはさすがに困る人が多いんじゃないかなあ…?全部サポート対応するのかしら。
それはそれとして、この記事ではその Undocumented API を使って、旧 UI で設定した Slack Integration の確認と変更、削除のやり方をまとめます。説明しませんが、IRC も出来ると思います。
※ 9 月にサポートに聞いた時、「Undocumented API を使うのは構わないのだけど、やり方自体も Undocumented なのは変なのでヘルプページに書いて欲しい」と伝えたけど、書かれてないようなのでこの記事を書いています。
確認する
こんな感じです。CIRCLE_TOKEN は https://app.circleci.com/settings/user/tokens で作ります。
CIRCLE_TOKEN=xxxxxx
VCS=gh
ORG=masutaka
PROJECT=example
curl "https://circleci.com/api/v1.1/project/${VCS}/${ORG}/${PROJECT}/settings" \
-X GET \
-H 'Content-Type: application/json; charset=utf-8' \
-H "Circle-Token: $CIRCLE_TOKEN" \
| jq '{
vcs_url: .vcs_url,
slack_channel_override: .slack_channel_override,
slack_channel: .slack_channel,
slack_subdomain: .slack_subdomain,
slack_api_token: .slack_api_token,
slack_notify_prefs: .slack_notify_prefs,
slack_webhook_url: .slack_webhook_url
}'
このような結果を得られます。
{
"vcs_url": "https://github.com/masutaka/example",
"slack_channel_override": null,
"slack_channel": null,
"slack_subdomain": null,
"slack_api_token": null,
"slack_notify_prefs": null,
"slack_webhook_url": "https://hooks.slack.com/services/*********/*********/************************"
}
変更する
PUT で変更します。
以下の例では slack_notify_prefs と slack_webhook_url を変更しています。ちなみに前述の画像にある “Fixed/Failed Only?” にチェックを入れた状態が “slack_notify_prefs”:“smart” みたいです。
CIRCLE_TOKEN=xxxxxx
VCS=gh
ORG=masutaka
PROJECT=example
curl "https://circleci.com/api/v1.1/project/${VCS}/${ORG}/${PROJECT}/settings" \
-X PUT \
-H 'Content-Type: application/json; charset=utf-8' \
-H "Circle-Token: $CIRCLE_TOKEN" \
--data-raw '{"slack_notify_prefs":"smart","slack_webhook_url":"https://hooks.slack.com/services/*********/*********/************************"}'
channel の変更は slack_channel の変更で良いと思いますが、おそらく slack_channel_override も指定も必要なはず。ただ、文字列で何を指定するのかは分かりませんでした。
場合によりますが、Slack Webhook URL に紐付いた channel を変えたほうが楽だと思います。
削除する
削除も PUT を使います。Slack 関係の設定をすべて初期化(?)する点が異なります。
CIRCLE_TOKEN=xxxxxx
VCS=gh
ORG=masutaka
PROJECT=example
curl "https://circleci.com/api/v1.1/project/${VCS}/${ORG}/${PROJECT}/settings" \
-X PUT \
-H 'Content-Type: application/json; charset=utf-8' \
-H "Circle-Token: $CIRCLE_TOKEN" \
--data-raw '{"slack_channel_override":"","slack_channel":null,"slack_subdomain":null,"slack_api_token":null,"slack_notify_prefs":null,"slack_webhook_url":""}'
おまけ
Slack Webhook URL が
https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYYYY/ZZZZZZZZZZZZZZZZZZZZZZZZ
だったら、Slack の設定ページは
https://slack.com/services/YYYYYYYYYYY
です。
https://example.slack.com/services/YYYYYYYYYYY
のように Slack の workspace 名を指定する必要はあるかもしれません。