BitriseとGHEのリポジトリを連携した時のメモ

# はじめに

こんにちは。
Bitriseを用いてCI/CDを作成していると、外部サービスのイベントをトリガーにビルドを実行したり、Slackに通知を送ったり外部サービスとの連携をしたくなると思います。
以前BitriseとGitHub Enterprise(GHE)を連携させようとした際に少し手間取ったので、今回は備忘録として記事にまとめます。

この記事では主に以下について説明します
- GitHub Enterpriseのイベントをトリガーにしたビルド実行方法
- Slackへの通知設定方法

# 1. GHEのイベントをトリガーにしたビルド実行

Bitriseのビルドトリガーについては[こちら](https://devcenter.bitrise.io/en/builds/starting-builds/triggering-builds-automatically.html)にまとめられているのですが、Supported trigger conditionsにGHEが含まれていません。
そのためGHEとの連携は、通常のGitHubと少し設定方法が異なります。

## 設定手順

1. Bitriseの「Workflow」→「Triggers」からトリガーを設定  
   - 例として、ここではdevelopブランチがpushされた場合に発火するように設定しています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646568/722715be-b345-4567-a023-d189d3f0e3d9.png)


2. Bitriseのプロジェクト設定を開く
   - プロジェクトのダッシュボードから「Project settings」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646568/8a2d89e8-dce4-49c3-b1ea-098513cd9ef2.png)

3. 「Integrations」をクリックし、「Webhooks」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646568/8d343f6d-dbe5-466c-b69b-2aab3efff878.png)

4. 「Incoming Webhooks」の「Manual webhooks」セクションからWebhook URLをコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646568/4ec09e2c-6b93-493c-a18f-74abdf8bc18e.png)

5. GHEのリポジトリの設定ページを開く（リポジトリのホームページから「Settings」をクリック）

6. サイドメニューから「Hooks」を選択
7. 「Add webhook」ボタンをクリック
8. 以下の情報を入力
   - Payload URL：先ほどコピーしたBitriseのWebhook URL
   - Content type：`application/x-www-form-urlencoded`
   - イベントの選択：必要なイベント（迷ったときは「Send me everything」で大丈夫かと思います）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646568/dbcd2fbe-aee4-424e-b32e-b62d578e92ce.png)

9. 「Add webhook」をクリックして保存

:::note warn
Personal Access Token (PAT)を使用してGHEとBitriseを連携している場合、PATには`admin:repo_hook`の権限が必要です。
権限が不足していると、Webhookの設定ができません。
:::

これで設定完了です。GHE上でイベントが発生すると、BitriseにWebhookが送信され、ビルドが開始されます。

# 2. Slackに通知を送る

Bitriseのビルド結果をSlackに通知する設定方法です。[^1]

[^1]: この手順自体はGHEに特化した方法ではないのですが、BitriseとGHEリポジトリを連携した際、同時に行ったため参考までに記載します。

## 設定手順

1. Slackのワークスペースの管理ページを開く
2. アプリを検索し、「カスタムインテグレーション」→「Incoming Webhook」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646568/43028639-fd13-44c6-9a62-118913d638b9.png)
3. 「Slackに追加」をクリックし、通知を送信したいSlackチャンネルを選択
4. Webhook URLが生成されるのでコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646568/6bca097b-63d2-4ac4-abae-900db9e6e661.png)
5. Bitriseのワークフローエディタを開き、通知を送りたいワークフローを選択
6. 「+ Add Step」をクリックし、「Send a Slack message」ステップを検索して追加
7. 追加したステップの設定を開き、以下の設定を行う：
   - Webhook URL：先ほどSlackで生成したWebhook URL
   - メッセージの内容やアイコンなど、必要に応じて他の設定も行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646568/45726f30-eeed-4c56-bc03-a79d1860777a.png)

:::note info
Webhook URLはプロジェクトの「Secrets」に保存し、環境変数として参照することをお勧めします。
例：`$SLACK_WEBHOOK_URL`として保存し、ステップの設定でこの環境変数を参照する
:::

これで設定完了です。ワークフローが実行されると、指定したSlackチャンネルに通知が送信されます。

# うまくいかない時は

連携がうまくいかない場合は、以下を確認してみてください
- GHEとの連携：Personal Access Tokenの権限が適切か
- Slack通知：Webhook URLが正しく設定されているか
- 全般：Bitriseのログでエラーメッセージを確認

# 参考文献

https://devcenter.bitrise.io/ja/connectivity/integrating-github-enterprise-with-bitrise.html

https://city-os-6hp5180.slack.com/marketplace/A0F7XDUAZ--incoming-webhook-