以下の記事にて、AndroidアプリのCIにCircleCIを使った例の記事を書きました。
https://qiita.com/kasa_le/items/fab191326b42f5adb82d
Slack orbがかなりバージョンアップしていて変わっていたので対応してみました。
環境など
ビルドしているのはAndroidアプリですが、Slack orbを使っている部分はどんなプロジェクトでも参考になるかと思います。
ツールなど | バージョンなど |
---|---|
Circle CI | 2.0 |
Docker size | Medium |
Slack orb | 4.4 |
注意事項
本記事の内容は、Slack Orb 4.4で動きます。
4.1や4.1.1では動かないので注意してください。理由は分かりませんが、私も動かなくてハマっていました。
Slack Appの作り方
基本的には以下のページの通りです。
Create a Context on CircleCIのセクションにある内容は、Organizationで環境を共有したい場合以外は、Project SettingsのEnvironment variablesで追加すればOKです。
Slack orbの使い方
コマンドの設定
一番シンプルな使い方は、テンプレートをそのまま使うことだと思います。
テンプレートを使ったときの見た目は、以下のページで確認出来ます。
version: 2.1
orbs:
android: circleci/android@0.2.0
slack: circleci/slack@4.4
commands:
notify_slack_pass:
steps:
- slack/notify:
event: pass
template: basic_success_1
notify_slack_fail:
steps:
- slack/notify:
event: fail
template: basic_fail_1
成功時はテンプレートbasic_success_1を使い、失敗時はbasic_fail_1を使うコマンドをこんな風に用意しておくと、後でカスタマイズしたときにも1箇所に固まっていて見やすいです。
Jobの最後に使う
各ジョブの最後にそれぞれ呼びます。
複数のジョブを実行する場合で順列に実行し、途中の成功は通知が不要の場合の例になります。
jobs:
debug-build-test:
executor: android/android
steps:
- checkout
- run:
name: Debug build
command: ./gradlew assembleDebug
- notify_slack_fail
release-build:
executor: android/android
steps:
- checkout
- run:
name: Release build
command: ./gradlew assembleRelease
- notify_slack_fail
- notify_slack_pass
この後のワークフロー設定で出てきますが、debug-buildのあとにrelease-buildジョブを呼ぶので、debug-buildは失敗したときだけ通知しています。成功したときは通知しません。
release-buildは、失敗または成功したときどちらかが通知されます。
ワークフローの設定
workflows:
version: 2
build-and-test:
jobs:
- debug-build-test
- release-build:
requires:
- debug-build-test
始めにdebug-buildジョブを実行し、成功したらrelase-buildが実行されます。
通知結果
それぞれの実際の通知です。
成功時
失敗時
パラメータmentions
を指定してないのですが、項目がなくなるわけじゃ無くて空白になるだけみたいですね。
configファイルの全容
以下で、実際のconfigファイルの全容が見られます。
感想など
正直以前使っていたバージョンよりずっと使いやすくなった気がします。
が、orbの公式ページのexampleがorb4.1だったりして、そのままコピペしていると動かないという罠があり、何時間も費やしてしまいました・・・
最終的に、以下のIssuesで同じ現象の方のコメントを読み、4.4なら動くと書いてあってそれで上げてみたら何のことは無く動作したというオチでした。