GitHub ActionsでiOSアプリのテストの結果をSlackに通知したい!
GitHub ActionsとSlackを連携したい!
以前投稿したGitHub ActionsでiOSのプロジェクトをビルドしたい!でとりあえずGitHubにPushして、ビルドとテストが実行されるところまではできるようになりました。
そうすると、今度はその結果の通知がほしくなります。そこで今回はActionの実行結果をSlackに通知できるようにしてみたいと思います。
この記事の内容は、2020年1月頃に調査した内容です。
すでにSlackに通知できるActionがあるじゃあないか、、と思ったら、、
早速GitHubのMarketPlaceで「Slack」と検索すると、よさげにSlackへ通知できそうなActionがいっぱい出てきました。
そこの先頭にある「Slack Notify」を使ってみることに。 瞬殺じゃん、と思い、実行してみると、エラーが表示された。
エラーをみると、このActionはLinuxのOSでしか動かせないようです(理由ははっきりわかっておりません、、、)。 検索結果の上位にある他のActionもいくつか試しましたが、同じエラーが出ました。iOSアプリをビルドする以上、MacOSの指定は必須なので、仕方なくWebhookのURLを直叩きすることにしました。
WebhookのURLをcurlで実行して、Slackに通知を送る。
WebhookのURLの取得はこちらを参考にしました。 あとはそれを使ったActionを実行するだけです。
# Notify to slack when build and test succeeded
- name: Slack success notification
- run: |
curl -X POST --data-urlencode 'payload={
"text": ":tada::tada::tada:${{github.repository}}: Build and Test succeeded!:tada::tada::tada:"
}' ${{secrets.SLACK_WEBHOOK_URL}}
github.repository
は「{ユーザー名}/{リポジトリ名}」の形式で文字列を取得できる環境変数です。 先ほど取得したSlackのWebhookのURLはGithubのリポジトリのSecretsに保存しています。 ここに登録することで、PublicリポジトリがForkされても、そのSecretsの値はコピーされません。WebhookURLはそれを知っていれば、誰でもそれを設定したチャネルに投稿できてしまうので、ハードコーディングしないようにしましょう。 登録した値は、secrets.{登録したkey名}
で取得できます。 実行して、ビルドやテストが成功すると、以下のようにちゃんとSlackに通知が届きました。
ちなみにエラーの時は以下のように設定しています。
##### Run build action #####
# Notify to slack when build failed
- name: Slack build failure notification
- if: failure()
run: |
curl -X POST --data-urlencode 'payload={
"text": ":fire::fire::fire:${{github.repository}}: Build failed..:fire::fire::fire:"
}' ${{secrets.SLACK_WEBHOOK_URL}}
##### Run unit test action #####
# Notify to slack when test failed
- name: Slack test failure notification
if: failure()
run: |
curl -X POST --data-urlencode 'payload={
"text": ":fire::fire::fire:${{github.repository}}: Test failed..:fire::fire::fire:"
}' ${{secrets.SLACK_WEBHOOK_URL}}
if: failure()
を入れることで、直前のActionが失敗した時に実行されるようになるになります。参考 ビルド失敗時とテスト失敗時の結果は以下の通りです。
本当はビルドに失敗した場合は、「Build failed..」のメッセージだけが表示されるようにしたいのですが、今のところやり方がわからず、、(知っている方はぜひおしえていただけると!)
テストで使用しているリポジトリ
https://github.com/u5-03/Swift-github-actions Publicリポジトリであれば、Github Actionsは無料で使用できるので、検証で使用する場合はPublicリポジトリで!
参考資料