2020-10 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
今年の春くらいに 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 名を指定する必要はあるかもしれません。
2020-10 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31