JenkinsでiOSアプリケーションを自動ビルドする
Jenkins.
継続的自動インテグレーションってやつなんだが,ドメインがjenkins-ciなあたり,下のAA以外思いつかないわけだが.
,-――――――-.
/ |
/ |
/ |
l"ジェンキン寿司 l
,、_lー-―――――‐--、/l
i ト、ミミ ,r‐- 、``'ニ=‐、.彡リ.
ヾ,iハ゛.´ _,,、_ i.; _,. ` 彡'i)
`、j,' `゚''´:.ノ i::<・ゝ) .ハン へいらっしゃい!!
i, ` ,、/ i_ `` ,r'
,r〃'i ,r'ヽ、 _,〉 /.
/i:ト、;;i, ミ=_‐_-, 'i /ヽ__
r-‐'´i::::ハ;;ヾ、‐‐-、 ノ´/i:::'i`i‐- 、_
::i' .l:i 'i::::i ヾ;;`‐---‐'i':/ i、 'i::! i::::i `
:i' i:| !:::l _,r.、;;;;;,r''´ヽi. ll::i i::i l:::'i
iMacを新調して,メモリをフルフルでのっけたら,なにやらせても余裕綽々なので,バックでJenkinsでビルドやテストをさせることにした.
特にやりたいのが,TestFlightへのアップロードだ.毎度ビルドして,TestFlightに・・・というのは面倒くさい.
素直にはすすまないところを,Xcodeでビルドするところまでまとめてみる.
JenkinsでiOSの自動ビルドをするポイントは,どうやら・・・・
・jenkinsアカウントで処理することを忘れない
・秘密鍵と証明書をシステムにインストールするとはかどる
・jenkinsアカウントのホームパスに注意する
の3点っぽい.以下で詳しく説明していこう.
Jenkins
Jenkins自体のインストールは至極簡単.Jenkinsのサイトからパッケージをダウンロードしてインストールするだけである.
しかし,このインストールの結果に若干がクセが見られ,それを理解してないと後々ごちゃごちゃになるので以下の2点に気をつける.
・Jenkinsはjenkinsアカウントが実行する.
・Jenkinsのツール類は,/Users/Shared/Jenkinsにインストールされる.
あと,jenkinsの管理画面で,以下のプラグインをインストールしておこう.
・github関連のプラグイン
・xcode関連のプラグイン(SICCI for Xcode Plugin,XCode integration)
githubからcloneして,pullする
パブリックリポジトリなら問題ないのだが,プライベートリポジトリだと,gitからのチェックアウトの設定に一癖ある.
jenkinsアカウントでgitからフェッチしてくるので,jenkinsのアカウントにたいして,鍵を設定する必要がある.
こんな感じでjenkinsアカウントで鍵を生成し,githubに登録すればよい.
> sudo -u jenkins ssh-keygen -t rsa -C "your_email@youremail.com"
そして,/Users/Shared/Jenkins/.ssh/id_rsa.pubをgithubのSSH Keysに登録する.登録後,再度以下のコマンドで認証がうまくいくかをテストしておく.
> sudo -u jenkins ssh -T git@github.com
これでsshの設定は完了.
gitのrepositoryは,git@github.com:hoge/bar.gitのように指定する.
ここまでは簡単なのでが・・・・Xcode周りでややこしいのは三つ.
・xcodebuildコマンドのライセンス確認
・証明書と秘密鍵
・プロビジョニング
xcodebuild
xcodebuildは,SDK5くらいからサポートされたXcodeのプロジェクトをコマンドラインからビルドしたりできる便利ツールだ.
jenkinsのxcodeプラグインもこれを使っている.
普通にxcodebuildを利用すると,最初にライセンス許諾への同意を求められる.自動化ツールは,当然これに反応できないので,あらかじめ対応しておく.
jenkinsアカウントになってから一度ライセンスに対応しておけばいいはずなんだが,なかなかうまくいかなかった.
私は,suでも一応許諾作業をやった気がする(ごちゃごちゃ作業しすぎてわけがわからなくなった).
> sudo -u jenkins xcodebuild・・・agreeと入力して同意する
> sudo xcodebuild・・・agreeと入力して同意する
iOSビルドでもっとも重要かつ複雑なのが証明書と鍵の処理だ.
jenkinsアカウント用に鍵と証明書をインストールするのは,複雑そうなので,証明書と鍵をシステム全体で共有できるようにする.
ただし,この方法は,マシンを共有している場合,ほかのユーザに証明書が共有されてしまうっぽいのでおすすめできない.ちゃんと考慮して行うべきである.
自分のアカウントにインストールされている鍵と証明書は,「ログイン」から「システム」にドラッグアンドドロップするだけ移動できる.
よくできているなぁ・・・・.
これでiOSにまつわる証明書と鍵をすべて移動しておく.
プロビジョニングファイル
プロビジョニングファイルは,xcodebuildが認識するパスに保存しておく.
/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profile
ここに*.mobileprovisionプロビジョニングファイルをすべてコピーしておけばよい.
とりあえず,これでJenkinsでgithubからフェッチして,ビルドすることができるようになったはず・・・・だ・・・・・.