Edited at

Git+Jenkins+MonacaCLI+DeployGateを使ったテストアプリ自動ビルド、自動配布

More than 3 years have passed since last update.


概要

コミュニケーションのラグなどから膨れ上がる作業時間を改善したかったのと手動はなんかイケてなかったのでGitの更新をJenkinsで拾ってMonacaでビルドしてDeployGateへアップロードまでを自動化

あとWindows機でやってるとiTunesでipaファイル同期とかめんどくさかったしね

自動化したことによって、こんな感じに改善できたのでその構成をつらつらと。Cacoo便利!

Sitemap.png


インストールしたもの


  • MonacaCLI

  • DeployGateコマンドラインツール(以下、dgツール)

  • NVM(nodejs,npm)


    • MonacaCLIのインストールに必要



  • Ruby >= 2.0.0


    • DeployGateコマンドラインツールのインストールに必要

    • 公式には2.0.0と書いてあったけどdgツールのインストールがこけたので2.1.1入れました



  • Git,Jenkins


    • この2つはyumあたりで入れればいいだけなので詳細は割愛します




インストール作業

ここは最終的にjenkinsのジョブ上でmonaca叩ける環境になってればなんでもいいです


NVM(nodejs,npm).install

chsh jenkins          #/bin/false → /bin/bash

su - jenkins
git clone https://github.com/creationix/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`
. ~/.nvm/nvm.sh
nvm install stable
nvm install 0.10 #npmを入れるためだけにインストール
nvm uninstall 0.10
nvm use default


MonacaCLI.install

npm install -g monaca



以下はAPI使うといらないやつ


ruby.install

yum -y install gcc zlib-devel openssl-devel sqlite sqlite-devel mysql-devel readline-devel libffi-devel

cd /usr/local/src
wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.1.tar.gz
tar zxvf ruby-2.2.1.tar.gz
cd ruby-2.2.1
./configure
make
make install
ln -s /usr/local/bin/ruby /usr/bin/ruby


dgツール.install

curl -sSL https://deploygate.com/cli/install/08bf8613 | bash



Jenkinsのジョブ設定


buildジョブ


  • ビルドトリガ:SCMポーリング

  • ビルド:シェルの実行

  • ビルド後の処理:他のプロジェクトのビルド(deployジョブ)


シェル内容.jenkins

source ~/build.sh



build.sh

#!/bin/bash

source ~/.nvm/nvm.sh
cd $WORKSPACE
expect -c "
spawn monaca login
expect
\"Email address:\"
send --
\"john.doe@mail.com\n\"
expect
\"Password:\"
send --
\"pswd\n\"
expect eof
exit
"

monaca remote build --build-type=debug --platform=android|grep "\.apk$"|sed -e "s/.*stored at //g"|xargs -I{} mv {} ~/app_build/app.apk
monaca remote build --build-type=adhoc --platform=ios|grep "\.ipa$"|sed -e "s/.*stored at //g"|xargs -I{} mv {} ~/app_build/app.ipa
monaca logout



deployジョブ


  • ビルド:シェルの実行


シェル内容.jenkins

source ~/deploy.sh



deploy.sh(dgコマンドver)

#!/bin/bash

PATH=$PATH:/usr/local/bin
expect -c "
spawn dg login --terminal
expect \"Email:\"
send -- \"john.doe@mail.com\n\"
expect \"Password:\"
send -- \"pswd\n\"
expect eof
exit
"
[ -e ~/app_build/app.apk ] && dg deploy ~/app_build/app.apk --message='TestAppAutoDeploy' --distribution-key=[配布ページURL末尾のハッシュ]
[ -e ~/app_build/app.ipa ] && dg deploy ~/app_build/app.ipa --message='TestAppAutoDeploy' --distribution-key=[配布ページURL末尾のハッシュ]
dg logout


deploy.sh(APIver)

#!/bin/bash

cd ~
[ -e ~/app_build/app.apk ] && curl -F "file=@app_build/app.apk" -F "token=[token]" -F "message=AutoDeploy" -F "distribution_key=[配布ページURL末尾のハッシュ]" -F "release_note=AutoDeploy" https://deploygate.com/api/users/[ユーザID]/apps
[ -e ~/app_build/app.ipa ] && curl -F "file=@app_build/app.ipa" -F "token=[token]" -F "message=AutoDeploy" -F "distribution_key=[配布ページURL末尾のハッシュ]" -F "release_note=AutoDeploy" https://deploygate.com/api/users/[ユーザID]/apps

DeployGateのWeb画面から「開発ツール>DeployGate API」と遷移した先にtokenが入ったサンプルが置いてあったのでそこから拾ってくると楽です



当初はdgツールでやる予定だったけどアップロードまで出来たものの配布状態に出来ず…

なんかいい方法ないかなーってドキュメント見てたらAPIでアップロードと配布処理まで同時にできたので移行

rubyとdgツールをインストールする必要なかった…



2016/03/22 更新

ごめんなさい配布する方法有りました

@henteko さんありがとうございます!

2016/03/24 更新

deploy.sh(dgコマンドver)の内容をアップロードだけでなく配布まで行う記述に変えました


地味にハマったところ


MonacaCLI(1.2.10)で公式ドキュメントもコマンド内のヘルプでも現在使えないオプションがサンプルとして記載されていた

debugビルドとかは普通に通ってたのでtestが怪しいと思ってadhocに変えたらビルド通った!

MonacaWeb上でビルド結果一覧から確認してもInvalidって出てたしね…

monaca remote build --platform=ios --build-type=test 

↓正しくはこう

monaca remote build --platform=ios --build-type=adhoc 



MonacaCLIでのリモートビルド時に「undefined」

寸前までビルドできてたのにundefinedが出始めた

原因は一度ビルドした後にMonacaWeb上に出来上がったプロジェクトを削除したせい

仕組み的には、

初回ビルド時にプロジェクトをアップロードしMonacaWeb上に作成されたプロジェクトのIDをローカルに保存



以降のビルドでは保存されたIDを元にMonacaWeb上でプロジェクトを探す

該当のIDのプロジェクトが見つからないよ!ってだけだったっぽい



dgツールでログイン出来なかった

curlやwgetは通るのにdg login --terminalだけこける謎現象

原因はその時つかっていたネットワークが接続後に認証入るタイプだったせい?(wifiスポットとかのアレ)

特殊なネットワーク環境で試す時は注意が必要っぽい



dgツールのインストール失敗

sudoでgemのpathが通ってなかっただけなのでvisudoで書き換えて事なきを得た


まとめ

0スタートで始めたわりには3,4日で運用に載せられた上、かなりの改善が見えて大満足の結果でした

DeployGateコマンドラインツールはまだバージョン低いので今後のアプデに期待

配布処理含んだのはツールにはないって書いたけどあったらごめんね ありました。

あと今(2016/03/18時点)のMonacaCLIの公式ドキュメントは信じちゃだめだよ

自動化大好きおじさんとの約束だよ