くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

Azure DevOps で Firebase, google-services.json を使った Android-Kotlin なアプリを CI/CD する

Azure DevOps 使ってますか〜?周りでは余り使われてなくて悲しいです〜(お金で殴れるなら Bitrise も使いたい...) タスク管理とかの機能が強力で良さげっすよ(Trello でやるよりは良さげ、癖が強いけど)

さて、 Android-Kotlin な Firebase を導入したアプリがあります。

Firebase を導入するためには google-services.json が必要になります。

このファイルには機密情報が入っているため、普通に .gitignore を自動生成するとリポジトリに入らないようになってます。(入ってたらやばい

対策しないとビルドエラーになる

さて、 CIサーバー(CD するときも含むけど、以下ではCIにまとめる) でビルドをするときにこのままだと問題が発生します。

  1. Github (や Azure DevOps に入ってる)のリポジトリから git clone してする
  2. そのまま.gradlew build とかしただけでは google-services.json がないのでビルドエラーになる。

対処法は機密ファイルをダウンロードする

Azure DevOps やまともな CI サービスには 機密情報をダウンロードしてくる機能があります。( Circle CI でも確認)

機密ファイルをCIタスクの中でダウンロードする手順

  1. Secure File download タスクでダウンロードしてくる
  2. copy タスクで app module に機密ファイルをコピー 自分はマルチモジュールな構成で開発してるので App Module ですが、モノリシックモジュールで開発してる人はそれぞれ〜な場所にコピー
  3. あとは普通にビルドしてくタスク

画像でも貼ってみる

f:id:kuxumarin:20181129024555p:plain

つまずいたポイント紹介

多分これが一番重要な

ダウンロードしてきたファイルはどうやって取り出すの?

以下の環境変数(?)に入っているのでそれを使えばいい感じです。

$(Agent.TempDirectory)

f:id:kuxumarin:20181129024903p:plain

まとめ

  • CI しているなかで機密ファイルが必要になったときはダウンロードしてくれば良い
  • Azure DevOps のAndroid 関係の情報はネットにほとんど存在しない...><
  • マルチモジュールな感じでやってるとパス周りがちょっと違う