🚀

Bitrise × Slackワークフローで快適CI環境を構築する

2021/04/19に公開

社の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