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


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

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

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

準備

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

  • アプリのソースコードはGitHubにホスティングされている
  • BitriseにはGitHubでサインナップ、またはGitHubのアカウントと連携されている。
  • DeployGateのアカウントを保持している。

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」と表示され、検証が始まります。しばらく時間が必要なのでそのまま待ちます。

  6. 検証が終わるとプラットフォームやモジュール設定なんかを自動で読み込んでくれます。超便利ですね!もし自動検証された内容で問題なさそうであれば、ビルドとテストに使う環境変数を選びましょう。ここではDebugを使用することにします。ビルド設定に問題がなければ「Confirm」を押してください。

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

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

DeployGateへのアップロードステップを追加する

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

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

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

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

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

DeployGate Upload Stepの設定

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

  1. DeployGate: API KeyDeployGateのプロフィール設定に表示されている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で並行して配信する」などを参考にしてください。ブランチ名を使用する場合は$BITRISE_GIT_BRANCHなどの環境変数が利用できます。

基本的にアップロードオプションに関してはDeployGate APIに準拠しています。詳しい使い方はDeployGate API Referenceを参考にしてください。

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

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

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

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

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

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

自動配布で快適な開発ライフを

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