こんにちは, またくです。

Google Play にアップロードする用のリリースビルドの apk ファイルの生成を CI のワークフローにどうにかして入れたかったので調べました. Bitrise を使います.

keystore file をアップロードする

プロジェクトの Workflows -> Code Signing のタブへ行き, keystore ファイルをアップロードします.

アップロードすると keystore password, keystore alias, private key password を入力できる画面になるので, keystore ファイルの値をそれぞれ入力します.

何もしないと bitrise の workflow 上でこのファイルを参照できないので, ファイルをダウンロードするタスク (File Downloader) を, アプリの署名のタスクより前に追加します. Git clone した後とかでいいかなと思います.

リリースビルドを作成する

リリースビルドの apk を作成するタスクを追加します.

上部の ENV VARS のタブをぽちっとすると環境変数がセットできるので, そこで $GRADLE_TASK に assembleRelease を入れておくといいかと思います.

workflow ごとに内容を変えられるので, release 用の workflow では上のようにセットすると良さそうです.

アプリに署名する

作成された apk ファイルに署名するタスク (Sign APK) を, apk ファイルが生成された後のステップに追加します.

$BITRISE_APK_PATH に apk ファイルがあるのですが, 何も設定していなければ /bitrise/deploy/app-release-unsigned.apk に生成されているはずです. (ここらへんはビルドログを見てください)

keystore ファイルの各認証情報が間違っておらず読み込める状態であれば正常に終わり, 署名された apk ファイルが生成されています. このファイルを手に入れられれば play console でのアップロードに使えますね.

DeployGate や Slack に apk ファイルをアップロードする

script タスクで任意の shell script を書けるので, それを使います.

#!/bin/bash

# DeployGate
curl -F "file=@/path/to/apk" \
     -F "token=$DEPLOYGATE_KEY" \
     -F "message=$GIT_CLONE_COMMIT_MESSAGE_SUBJECT" \
     https://deploygate.com/api/users/{myName}/apps

# Slack
curl -F "file=@/path/to/apk" \
     -F "channels=#develop" \
     -F "token=$SLACK_TOKEN" \
     https://slack.com/api/files.upload

Bitrise はブランチ名によって使用する workflow を分けられるので, release/* といったリリース用のブランチ名の際は, リリース用の workflow でやってもらうといった方法を取るのが安全なのかなと思います.


手元の環境は常に開発中であると思うので, コミットしていないファイルもたまにはあるでしょう. そういった際にリリース用のファイルを作るにあたって色々とあぁ〜〜という気持ちにはならないはずです.

個人レベルだと対した手間でないのであれですが, リリース作業を自動化する方法も気になるので調べてみようと思います.

参考