Bitrise × Slackワークフローで快適CI環境を構築する
社のiOS ProjectをJenkins→Bitriseに移行した際、1点課題がありました。それはBitriseにはJenkinsのようにビルド設定のフォームを作るようなカスタマイズ性はなく、そこのCI体験がデグレする点です。
それをSlackを使って解決するTipsを共有します。
JenkinsはプルダウンなどUIを組み合わせて、ビルド設定フォームを作れる。
Bitriseは、テキストフォームしか用意されていないため、ビルド環境やターゲットを毎回手入力しなければならない。
弊社アプリは複数ビルド対象のターゲット x 複数環境 x 複数デプロイ担当
の組み合わせが存在するため、この手入力のフォームはヒューマンエラーの温床になりえました。
SlackのWorkflowを活用し解決
その問題を解消するために、SlackのWorkflowを活用しました。
SlackのWorkflowはテキストフォームやプルダウンなどのUIを組み合わせて対話形式のフォームを作れるため、ここからBitriseのビルドまで繋げられると良さそうです。まず完成形をお見せします。
Slack Workflowからビルドする流れ:
1. Slack: Workflowでポチポチしていく
2. 選択した項目に応じたテキストをBotが出力
3. Outgoing WebHooksが発火
4. Bitrise実行
5. ビルド結果をSlack投稿
Slackの稲妻ボタンからWorkflowを選択し、フォームをポチポチ選択
選択した項目に応じたテキストをBotが出力
Outgoing WebHooksが発火
Bitrise実行
ビルド結果をSlack投稿
誰が、いつ、なんのアプリをどの環境でビルドしたかが、リアルタイムで共有されるため便利かつ安全です。
構築の流れ
下記を組み合わせることで、実現できます。
1. Outgoing Webhooksを設定
2. (Slackの)Workflowを設定
SlackのOutgoing WebhooksでBitriseを実行できるよう設定
BitriseのCodeタブ > INCOMING WEBHOOKSの項目からSETUP MANUALY
を選択し、プルダウンからSlackを選択。表示されたURLをコピー
詳細は公式ドキュメントを参照
Slackの https://[ワークスペース名].slack.com/apps からOutgoing WebHooks
を追加し、設定。(APIは非推奨になっているのでAppを導入する)
- hooksのURLに先の手順でコピーしたURLをペースト
- Trigger Word(s)にOutgoing WebHooksを実行するワードを設定
これで
{Outgoing WebhookのTrigger Word(s)に設定したワード} branch:ブランチ名|workflow:ワークフロー名
の文字列に反応してSlack経由でBitriseのビルドが実行されます。
SlackのWorkflowからOutgoing Webhookをトリガーするワードを出力する
Slackのワークスペース名のプルダウン > Tools > Workflow Builderからワークフロービルダー作成画面に遷移し、対話形式のフローを設定。
「コマンドを実行した人」や「先のステップのフォームで選択した項目」は変数として取得できるので、その変数を使ってOutgoing Webhookをトリガーするワードを出力するよう設定。(赤枠部分は先のステップの項目が出力される部分)
詳細はSlack公式のガイドを参照。
branch:ブランチ名|workflow:ワークフロー名
以外の設定項目をWebhook経由でBitriseに渡す場合は下記のフォーマットで実現できます
env[KEY1]:value1|ENV[KEY2]:value2
詳しくはbitrise-webhooksのREADMEを参照
以上で完成です。
何回かCI構築してきましたが、利便性と拡張性が高いので個人的にもおすすめの設定です。ぜひ試してみてください。
Discussion