Bitrise, GitHub, DeployGateを連携させ、全自動でアプリをビルドして配信するCI/CDシステムを作る

# アプリのビルド＆テストから配信までを超簡単に完全自動化！


![f74b2c45981b064baaff8386e4600cc5.png](https://qiita-image-store.s3.amazonaws.com/0/956/ebf1adbb-2e18-6ad9-6635-9ad8adf5b766.png)

コードや設定を1行も書かなくても、**ほぼ全自動でマウスでポチポチするだけでCI(Continuous Integration)環境を構築できる**ことで人気の[Bitrise](https://www.bitrise.io/)に、新しく**「[DeployGate Upload](https://www.bitrise.io/integrations/steps/deploygate--upload-app-bitrise-step) Integration」**が追加されました。このステップを使うと、アプリのテスト＆ビルドから配信までを**完全に自動**で行うことができるCI/CDシステムを**ブラウザから設定するだけで超簡単に構築**することができます。

この記事では、[Bitrise](https://www.bitrise.io/)とコードホスティングサービスの[GitHub](https://github.com/)、テスト用アプリ配信サービスの[DeployGate](https://deploygate.com)を連携させ、GitHubにコードをコミットすると自動的にBitrise上でテスト＆ビルドを行い、ビルド成功後にDeployGateを経由して開発メンバーにアプリを自動的に配信することができるシステムを構築する方法を、実際の画面を交えながらご紹介します。BitriseとDeployGateは共にiOSとAndroidの両プラットフォームに対応していますが、ここではAndroidアプリの自動ビルド＆配信を例に説明を進めます。

# 準備
前提として、以下の環境を想定しています。各サービスのサインアップや連携は事前に行っておいてください。

- アプリのソースコードは[GitHub](https://github.com/)にホスティングされている
- [Bitrise](https://www.bitrise.io/)にはGitHubでサインナップ、またはGitHubのアカウントと連携されている。
- [DeployGate](https://deploygate.com)のアカウントを保持している。

# Bitriseのセットアップ
はじめに、Bitrise側のセットアップを行って自動テストとビルドがGitHubと連携して行われるようにします。
といっても、基本的にはブラウザ画面から操作するだけです。ダッシュボードから「Add app」を選択し、Bitrise上にアプリのリポジトリを追加します。

1. 「Choose Account」で自分のアカウントを選択し、「Next」を押します。
2. 自動テスト＆ビルドを設定したいリポジトリを選択します。Privateリポジトリのほか、自分が所属するOrganizationのリポジトリなども選択できます。
3. 「Setup repository access」では、GitHubで公開鍵を公開している場合は「Automatic」を選択すれば自動的にGitHubから鍵を取ってきて設定してくれます。大抵の場合はこのままで問題ありません。基本的には**「Autonatic」**を選択し、「Do you need to use an additional private repository?」という質問にはGitHub上で自分がアクセスできないsubmoduleやライブラリなどがない場合は**「No, auto-add SSH key」**を選択してください。
4. 「Choose branch」ではアプリの追加時に設定を自動検証＆セットアップさせるためのGitブランチ名を入力します。**「master」**などとしておいてください。
5. ここまで設定が終わると「VALIDATING REPOSITORY」と表示され、検証が始まります。しばらく時間が必要なのでそのまま待ちます。
  ![20270ac4dc6f01eb5f01f1c3fdefd2e0.gif](https://qiita-image-store.s3.amazonaws.com/0/956/3252a68a-a7b0-ce29-8fa6-07f260ac506c.gif)

6. 検証が終わるとプラットフォームやモジュール設定なんかを自動で読み込んでくれます。超便利ですね！もし自動検証された内容で問題なさそうであれば、ビルドとテストに使う環境変数を選びましょう。ここではDebugを使用することにします。ビルド設定に問題がなければ「Confirm」を押してください。
  ![f733105a655a1b16644fea365fda00d5.png](https://qiita-image-store.s3.amazonaws.com/0/956/df5e8bc5-ce20-4253-775f-82ee318408a8.png)

7. 最後にWebhookを登録します。Webhookを登録すると、コードをPushするたびに自動でテスト＆ビルドを行ってくれるようになります。登録と言っても全自動なので、「Register a Webhook for me!」をクリックするだけでOKです。

![869ada128577e24ec70e2698d6572e93-1.png](https://qiita-image-store.s3.amazonaws.com/0/956/289df24b-84b4-5100-8bf5-fdcec946654b.png)

これで基本的なBitrideでの自動テスト＆ビルドの設定は終了です！びっくりするくらい簡単ですね！

# DeployGateへのアップロードステップを追加する
無事にビルドが成功するようになったら、DeployGateへのアップロードステップをworkflowに追加しましょう！
Bitriseのアプリ画面から「Open Workflow Editor」をクリックし、Workflow設定を行います。

![5de71884a9a7045e22bc159f62d843cd.png](https://qiita-image-store.s3.amazonaws.com/0/956/63fd2c5d-8de5-3789-e70a-d411a5c256d5.png)

Workflow Editorが開いたら、「Deploy to Bitrise.io」のステップの直下の「＋」をクリックし、対応するIntegrationsの中からDeployGateを検索して追加してください。

Bitriseには簡易なアプリ配信機能が搭載されており、デフォルトではビルド後のアプリへのリンクがメールで送られてきます。ただ、あくまでビルド結果のバイナリを配信する機能に特化されているので、端末にインストールされているバージョンの管理や過去のバージョンの呼び出し＆インストール、アカウントやグループ管理、権限の管理などの機能は限定的で、場合によっては機能が提供されていないものもあるため、多人数のプロジェクトや組織ではDeployGateを併用すると便利です。

そのままBitriseの配信を併用する場合は「Deploy to Bitrise.io」のStepをそのまま残し、もし配信をDeployGateに寄せて集中管理する場合はの当該ステップを削除してください。

![1bea8298f5036680c6c20b6cc89269ac.png](https://qiita-image-store.s3.amazonaws.com/0/956/f9fd17e0-c84e-214f-830b-61b32a0a21e4.png)

Workflow設定時の注意点として、**Stepの設定順番**に気をつけてください。「DeployGate Upload」はアプリがビルドされている事が前提になりますので、必ず「DeployGate Upload」の前にアプリをビルドするStepがあることを確認してください。


# DeployGate Upload Stepの設定
あとはDeployGate Upload Stepの設定を行うだけです！以下の要領に従って設定を行ってください。

1. `DeployGate: API Key`は[DeployGateのプロフィール設定](https://deploygate.com/settings)に表示されている`API key`をコピペしてください。グループとしてアップロードする場合はグループの`API Key`を使うこともできます。
2. `DeployGate: Owner Name`にはアップロード対象のユーザ名もしくはグループ名を指定してください。
3. `App file path`にはビルドされたAPK/IPAファイルのパスを指定します。このパスは環境変数に格納されているので、Androidの場合は`$BITRISE_APK_PATH`を指定し、iOSの場合は`$BITRISE_IPA_PATH`を指定してください。
4. `DeployGate: App Visibility`ではDeployGateのプロフィールページにアプリのアイコンを表示するかどうかを指定します。この設定はあくまで可視性に関するもので、`public`にした場合でも許可しない匿名の第三者が勝手にアプリをインストールすることは出来ませんので安心してください。

最低限必要な設定は以上です。続いて良く使うオプションについて説明します。

- `DeployGate: Short Message`はアップロード時に付与することができるメッセージです。`$GIT_CLONE_COMMIT_MESSAGE_SUBJECT`などを使用すれば、Git commit時のメッセージをそのまま使用することができます。
- `Distribution Key/Name`はDeployGateへのアップロード時に配布ページへの反映を同時に行うためのものです。詳しい使い方に関しては「[gitのブランチごとに別のバージョンのアプリをDeployGateで並行して配信する](https://qiita.com/kyoro353/items/46c990a7de0ea72e6c76)」などを参考にしてください。ブランチ名を使用する場合は`$BITRISE_GIT_BRANCH`などの環境変数が利用できます。

基本的にアップロードオプションに関してはDeployGate APIに準拠しています。詳しい使い方は[DeployGate API Reference](https://docs.deploygate.com/reference)を参考にしてください。

# 実際に自動でアップロードされるか試してみる

ブラウザからの操作だけで、簡単に全自動でアプリのテストからビルド、端末への配信までを自動で行うCI/CDシステムを構築することができました！早速動作するか試してみましょう。

コードを変更し、GitHubにコミットします。

```
git add .
git commit -m "change awesome"
git push origin master
```

すると自動でBitrise上でPrepairingが始まり

![32cb356e4400a909cc44c2603423a268.gif](https://qiita-image-store.s3.amazonaws.com/0/956/1c0beb76-e4d3-ac81-2811-7add50f8a3e9.gif)

RunningからSucceedになったあと、自動的にDeployGateにビルドされたアプリがアップロードされました！

![0fc4fc40e55ab047310949d7e1e94683.png](https://qiita-image-store.s3.amazonaws.com/0/956/87e85e4c-28ce-6888-92ce-411ef793b121.png)

# 自動配布で快適な開発ライフを
BitriseとGitHub、DeployGateを連携させて、GitHubにコードをコミットするだけで、全自動でアプリをテスト＆ビルド＆DeployGate配信までを完全に自動で行うCI/CDシステムを超簡単に作る方法をご紹介しました。
一度このようなシステムを構築してしまえば、あとはいつもどおりにコードを書いてGitHubにコミットするだけで、何も操作をしなくても常に最新版のアプリが自分やチームメンバー、QA担当者の端末に自動的に配信されるワークフローを実現することができます。
ぜひアプリの配布という無駄なヒト手間を削減し、1秒でも多くの時間を楽しい開発に宛てることで、快適な開発ライフをお送りください！