おじゃまぷよ系エンジニアメモ

アプリエンジニアからサーバーとインフラエンジニアに転身しました

BitriseでAndroidアプリのリリースを自動化

この記事はBitriseアドベントカレンダーの16日目の記事です。 仕事で何かとお世話になってるBitriseですがアプリで使うには便利なのでオススメしています。

Bitrise とは

Bitrise はモバイルアプリ開発に特化した CI サービスです。ブラウザ上でひとつひと つの step を組み合わせて Workflow と呼ばれる一連の流れを作成するところが簡単にで きることです。複雑なスクリプトを自分で書かずとも Bitrise があらかじめ用意している ので、利用者は使いたい step を選び、必要なパラメーターを設定するだけでいい感じの Workflow を作成できます。たとえば、「GitHub から clone」して、「Android アプリをビ ルド」し、「UnitTest を実行」し問題なければ「Google Play Store へリリース」という 流れを自分でスクリプトを一切書くことなくブラウザ上で組み立てることができます。

使用目的

弊社 においては主に以下の目的で使っています

  • staging 環境向けにビルドし実機テストをする
  • プルリクエストをトリガーに自動でテスト、deploygate へアプリの配布
  • release ブランチプッシュをトリガーに Google PlayiTunes Connect へ deployし、リリース作業の自動化

今回はその中でもプルリクエストのトリガーと release ブランチプッシュのトリガーの WorkFlow について紹介します。

releaseブランチプッシュ時のワークフロー図

現時点での弊社のワークフロー図です。

f:id:masahide318:20191215222620p:plain

ざっくり文章で説明すると

  1. Git Pullしてきます
  2. 前回releaseのリモートブランチが残ってないかチェックしています
  3. AndroidSDKをインストールします
  4. GradleでassembleProductReleaseでリリース用のapkファイルを出力します
  5. Bitrise上にdeployします
  6. Bitrise上にdeployしたapkのインストールページのQRコードを出力します
  7. Google Playへβ版としてdeployします
  8. SlackにGoogle Playへのdeployが成功したことと、6で出力した本番アプリ確認用のQRコードをSlackで通知します

いくつかStep紹介

f:id:masahide318:20191215223448p:plain

前回のreleaseのリモートブランチが残ってないかチェックするスクリプトです。
たまにリリース後にリモートブランチが残ってることがあり、本当にdevelopとmasterにマージ済みかどうか不安なのでチェックするようにしました。
Bitriseは生のスクリプトも書けるので用意されているStepにはないものはこうやってスクリプトを書くことで対応可能なところも柔軟性があっていいですね。

#!/usr/bin/env bash
git fetch --all
branchCount=(`git branch -a | grep remotes/origin/release/ | wc -l`)
if [ $branchCount -gt 1 ] ; then
  echo "releaseブランチが2つ以上pushされています。古いリリースブランチがリリースされているか確認してください"
  exit 1;
else
  exit 0;
fi

f:id:masahide318:20191215223759p:plain f:id:masahide318:20191215223956p:plain

Google Playへアップロードするapkファイルを出力するStepです。
プロダクトフレーバーを導入している場合はassembleProductReleaseコマンドを入れましょう

f:id:masahide318:20191215231532p:plain

Google PlayへdeployするStepです。
このステップを実行するにはBitrise上に2つ登録しておく必要があります。

  • keystoreファイルとそのaliasとパスワード
  • Service Account’s JSON key file

keystoreファイルについては説明を省きます。AndroidStudioから作成しましょう。
Service Account’s JSON key fileはGoogle PlayのDeveloperのコンソールから作成します。
詳しくはこちらの記事を参考に作成します。
作成したファイルは BitriseのCode Signingタブから登録しましょう。

f:id:masahide318:20191215224758p:plain

Slackへdeployが完了したことを通知するStepです。

f:id:masahide318:20191215224814p:plain

Create Install Page QR Code」のステップを途中に入れておくと「$BITRISE_PUBLIC_INSTALL_PAGE_QR_CODE_IMAGE_URL」の変数にインストールページへのQRコードを参照できるのでSlackのStepの「A URL to an image file that will be displayed inside the attachment」にそのまま入れてあげると

f:id:masahide318:20191215224824p:plain

このようにSlackにQRコードが来ます。開発者以外の人に最後動作確認してもらったりと、リリース前に誰かに触ってもらいたいときにQRコードを伝えます。

さいごに

ものすごくざっくりですがGoogle Playへdeployするまでのワークフローを紹介しました。 実際はdeploy前にInstrumentalテストを入れたいのですが、UIテストがTestLab上でうまく動かないことがあるので一旦おあずけしています。
Instrumentalテストが安定して動作するプロダクトの場合は間にいれておくと良いかも知れません。
技術書典7のときBitriseのチュートリアル本を書きましたのでよろしければこちらもどうぞ。

t-masahide.booth.pm