【自動化】JenkinsでFirebase App Distributionにアプリをデプロイする(Windows10)

Firebaseのサービスの一つに「App Distribution」というものがある。

DeployGate や TestFlight 等使ったことがある人ならわかるが、それらと同じような機能だ。
apkやipaをビルド→「App Distribution」にデプロイ→テスターや開発者に届くメール内のURLにアクセスすることで即インストールできる。 というもの。

そして今回は、「App Distribution」にデプロイ の部分を自動化するために、jenkinsを使う。
最終目標は、jenkinsで定期的にビルドをし、自動で「App Distribution」にデプロイする 環境を作ること。
毎朝、最新のビルドをPCを操作しなくても確認できる、そんな環境を作って開発を効率よくさせること。

今回の記事は、jenkinsで「App Distribution」に自動デプロイ する部分についてのみ記載しています。

公式リファレンス

基本は下の公式リファレンスの内容だが、その中で躓いた部分もあったので記載していく。

firebase.google.com


firebaseコマンドを使える環境を作ろう

最初にリファレンス内で、スタンドアロン バイナリとnpmどちらかを選択することができるが、
jenkinsで自動化させるためには、npmを選択する。

Node.jsは触ったことがなくても、ここでは難しいことはあまりしないので、気にせずNode.jsのインストールから始める。


Node.jsをインストール、npm でfirebase

nodejs.org

Node.jsを↑からDLできるインストーラに従ってインストールする。
これはnpmというNode.jsパッケージマネージャを使うためである。

Node.jsがインストールされているかを確認するにはコマンドプロンプトで、

node -v

を実行したときに、バージョンが表示されればインストールされている。


次に、npmを使ってfirebaseをインストールする(少し時間がかかる)

npm install -g firebase-tools

これでfirebaseコマンドが使えるようになる。自分がどのディレクトリにいても以下のコマンドが通ればOK.
正常にインストールできていれば、バージョンの数字がかえってくる。

firebase -V

試しに、firebase loginコマンドで、firebaseにログインしてみよう。
以下のコマンドを打つと、ブラウザが自動で立ち上がりfirebaseのログインユーザーを選択する画面へ遷移することになる。

firebase login

アプリIDを確認しよう

この記事はfirebaseでプロジェクトを作ってあることを前提にしているので、作っていない人はfirebaseの画面から作っておこう。
私の場合は、開発中のゲーム単位にプロジェクトを作っている。


余談だが、この状態でfirebase projects:listコマンドを打つと

firebase projects:list

こんなかんじでプロジェクトの一覧が返ってくる


対象のFirebase のプロジェクトへ遷移し、画面左の歯車→プロジェクトの設定

全般タブ内の、マイアプリを確認する。ここでアプリを作っていない人は作っておこう。
※アプリIDの値をこの後の手順で使います。

jenkinsでログインするために認証トークンの発行しよう

次に、jenkinsからfirebaseプロジェクトにログインするために認証トークンを発行する。
これは、jenkins等のCIシステムから、認証トークンを使ってログインするため予め発行しておく必要がある。
CIではGUIの操作はできないので、firebase loginの時のようにブラウザ上でログインするのではなく、認証トークンを使ってログインするのだ。

コマンドプロンプト上で以下のコマンドを打ってみよう。

firebase login:ci

ブラウザが立ち上がり、fibaseのログイン認証が求められる。
認証が終わると、コマンドプロンプト側にトークン(ランダムな文字列)が表示されているのでコピーしておく。

+  Success! Use this token to login on a CI server:

<<ここにトークンが表示されます>>

Example: firebase deploy --token "$FIREBASE_TOKEN"

firebaseコマンドでアプリをデプロイしてみよう

ここまでできたら、いよいよコマンドでデプロイを試してみる。
firebaseへのデプロイはfirebase appdistribution:distributeコマンドで行うことができる

firebase appdistribution:distribute 【アプリ(apkやipa)のパス】 --app 【アプリID】 --token 【認証トークン】

こんな形で「successfully」と出ていれば成功。

!  Authenticating with `--token` is deprecated and will be removed in a future major version of `firebase-tools`. Instead, use a service account key with `GOOGLE_APPLICATION_CREDENTIALS`: https://cloud.google.com/docs/authentication/getting-started
i  uploading binary...
+  uploaded new release 0.1 (1) successfully!
!  no release notes specified, skipping
i  distributing to testers/groups...
+  distributed to testers/groups successfully

ブラウザ上でも確認してアプリがデプロイされていることを確認しよう。

jenkinsからアプリをデプロイしてみよう

jenkins で新規ジョブ → フリースタイル・プロジェクトのビルド

ビルドの設定に Windowsバッチコマンドの実行 を追加し、

先ほどコマンドプロンプト上で行ったコマンドfirebase appdistribution:distribute をコピペして保存する。

jenkins で作ったジョブを実行してみよう!firebaseにデプロイされていればOKだゾ!

引っかかったところ

スタンドアロン バイナリ(exe)だとjenkinsで実行できない

最初の手順でnpmからfirebaseコマンドを実行するのではなく、スタンドアロン バイナリ(exe) を使っていたところ、
その後のjenkinsでのコマンド実行でつまずいた。
firebaseコマンドのパスが通せていなかったのだ。

'firebase' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

また、exeを起動してから、コマンドを打てばいいかと思ったが、コマンドプロンプト上ではうまくできても、
jenkins上でどう設定したらいいのかがわからなかった。

既にデプロイされているアプリと同じものはデプロイされない

この環境作る際に何回もデプロイを試し→firebaseコンソールでデプロイされたか確認 をしていたが、
既にデプロイされているアプリと全くおなじものを何回もデプロイしてもコンソール上の見た目は変わらないので
ちゃんとデプロイコマンドが通っていないのかわからなかった。
その場合は、毎回前回のアプリを消せばOK.ごみ箱で消せます。