タイトル長いw
Visual Studio Mobile Center(以下 VSMC) は Microsoft が提供している CI サービスです。
あまり知られていないでしょうが、 Java/Kotlin で書かれた普通の Android アプリもビルドできます。(そしてもちろん Swift 製の iOS アプリも対応してます。あと React Native もな。)
Kotlin/Java な Android Studio プロジェクトのレポジトリを VSMC に設定してやるだけでビルドまではできるのでなんにも難しいことはないです。
今日のメインは、VSMC でもようやくビルド後にスクリプトを実行させることができるようになったので、その紹介です。
これによると、プロジェクトのレポジトリに、特定のスクリプトファイルを入れておくと、ビルド後(やビルド前)に、そのスクリプトファイルを実行してくれる、というものです。
現在は、3つのトリガに対応していて、それぞれ次に示すファイル名のスクリプトファイルをリポジトリのプロジェクトディレクトリにおいておきます。
mobile-center-post-clone.sh
mobile-center-pre-build.sh
mobile-center-post-build.sh
プロジェクトディレクトリとは、Android Studio プロジェクトの場合、プロジェクトの build.gradle
がある場所、大抵は app
ディレクトリになります(下図参照)。
試しにビルドされた apk ファイルを DeployGate にアップロードする、というのをやってみます。 VSMC にもアプリの配信機能はありますが、社内で既に DeployGate を使っているし、DeployGate の方が専用アプリが用意されていてβテストサービスとしては勝っているので、今回例としました。
まず、当然ながら DeployGate 側の準備が必要です。ユーザー登録をして、手動でビルドした apk を DeployGate にアップロードしておきます。
そして、次のようなファイルを mobile-center-post-build.sh
というファイル名で app
ディレクトリの中に入れておきます。
#!/usr/bin/env bash
echo "Upload to DeployGate"
curl \
-F "token={deploygateのAPI key}" \
-F "file=@$MOBILECENTER_OUTPUT_DIRECTORY/app-release.apk" \
-F "message=build by Visual Studio Mobile Center - #$MOBILECENTER_BUILD_ID" \
https://deploygate.com/api/users/{deploygateのユーザーID}/apps
{deploygateのAPI key}
には、DeployGate のアカウント設定のページから API key の値を転記します。
{deploygateのユーザーID}
には、DeployGate に作成したユーザーのユーザーID を転記します(正しければ上記のURLが存在するはず)。
file=
に記述した app-release.apk
は、ビルド構成(Build Variant)が release の場合です。デバッグの場合は app-debug.apk
になるはずです(未確認)。
mobile-center-post-build.sh
をコミット、プッシュして VSMC の Build Configulation を見ると「Build scripts」 の項目に Post-build とチェックされ、正しく認識できていることがわかります。
あとは、 apk への署名を忘れないようにしましょう。Sign builds を On にして、 keystore ファイルなどを指定します。
社内配布であればデバッグ時と同じいいやってことで、開発用PCに入っている(Mac なら ~/.android/
にある) debug.keystore
をアップロード、入力項目は次のとおりです。
設定できたら、「Save & Build」 を押すと、ビルドが開始され、ビルドログを見るとスクリプトが実行されていることが確認できます。
よっしゃー!これでスクリプトさえ書けば Bitrise や CircleCI 並みになんでもできるぞー、と思いました。
が、 スクリプトファイルをリポジトリに含める のが作動条件なので、今回試したような 「DeployGate へのアップロード」というシナリオでは DeployGate の API key をリポジトリに含めることになってしまい、これは推奨されることではありません(公開リポジトリではご法度モノ)。
なんという「Microsoft、分かってない」感。なんでこんな仕様にしたのでしょう。 VSMC はプライベートリポジトリ推奨なのでしょうか…。私はプライベートなアプリのビルドを、Bitrise の無料プランでぶん回していたらビルド時間制限の上限に達してしまったので VSMC に移行してきたのですが、そういうシナリオなのでしょうか。
早いとこカスタムな Environment variables を作れるようにして欲しいところです。