JenkinsでUnityアプリを自動ビルドして開発効率をあげよう! Part.1 Jenkins導入編
GraffityのAzukiです!
久々のエンジニアブログになります。
今回から数回にかけてJenkinsを使ったアプリの自動ビルド(所謂CI/CD環境)の構築について紹介していきます。(全3回くらいかなぁ)
Jenkinsとは
Jenkinsとはオープンソースのソフトウェアビルド・テスト・デプロイなどを自動化させるためのサーバーです。国内ではよくJenkinsおじさんとか言われてますね。
例えば、gitにプッシュしたらビルドして配布とか、毎日X時にビルドして配布、みたいなことができたりします。
Jenkinsはとても拡張性もあり、プラグインも無数にあります。アイデア次第でなんでもできちゃいます(超高性能なcrontabみたいなものです)
JenkinsでUnityアプリをビルドする意味
Unityでゲームを作っていると、定期的に実機で動作確認したくなる時があります。そんな時に各自各々の環境でビルドしていると、このような問題が起きることがチーム開発ではよくあります
・知らないうちにビルドの手順が変わっていてビルドできない
・マシンスペックが低いと無限にビルドに時間取られる
・XCode使いたくない
・新規にジョインした人に説明するコストが発生する
などなど、
特にGraffityはARゲームを作っている関係上、デバイスのカメラを絶対に使うので他のゲームを作られてる会社さんよりも実機での検証の頻度が高いです。
Jenkinsマシンを会社に用意してビルドさせることでビルド→配布までを自動で出来るようになり、開発メンバーがビルド時間で虚無な時間を過ごさなくてもよくなります!!!!Jenkins万歳!
UnityCloudBuildじゃダメなの?
ダメです。
Graffityは以前のプロダクト開発中にUnityCloudBuildを採用していたのですがビルド時間が1回40~60分ほどかかっており、実用的ではなかったためJenkinsマシンを導入しました。Jenkinsマシン導入後はビルドから配布まで10~15分で完了するようになり、動作確認がとても楽になりました。今時点ではビルドマシン用意したほうが幸せになると思います。(CloudBuild早くなって欲しいですね。。)
必要なもの
・ビルドマシン用のMac(GraffityではMacMini2020の最上位モデルを使ってます)
・git管理されたUnityプロジェクト(git管理しなくてもできなくはないですが今回のシリーズはgit管理してる前提で進めます)
・Unity(今回は2019.4.10f1 基本的に手順は変わらないです)
・XCode(最新だと良い)
iOSビルドをするので今回はMac必須です。もしAndroidのみのビルドでいい場合はWindowsPCでも大丈夫ですが、今回はMac前提で手順を紹介するので所々変わってくると思います。
Jenkinsのセットアップ
では早速Jenkinsを導入しましょう!今回はHomeBrewで導入します。
brewが使えない方はこちらから
ターミナルからjenkinsを入れていきましょう
azuki$ brew install jenkins
🍺が出たら導入完了です
🍺 /usr/local/Cellar/jenkins/2.257: 7 files, 67.2MB, built in 6 seconds
Jenkinsサーバーを立ち上げましょう
azuki$ jenkins
Webブラウザを開き、localhost:8080にアクセスします
Jenkinsの起動画面が表示されればJenkinsの導入には成功しています
少し待つとこのように初回起動のウィザードが出てきます。
Administrator passwordを求められるので表示されているファイルを開きパスワードをコピーして貼り付けましょう
次の画面に進むとプラグインのインストール画面が出ます。
個別で入れてもいいのですがとりあえずお勧めされたものは入れておきましょう。
Install Suggested Pluginsをクリックして続行します。
インストール中。。
インストールが終わったらAdminUserを作成します。
Jenkins URLは環境に応じて設定変更してください。今回はこのまま続行します。
Jenkins is Readyが出たらセットアップは終了です
Jenkinsのメイン画面
ビルド用ジョブを作る
次回以降で実装していくアプリケーションをビルドするジョブを作っておきましょう。
左側メニューの新規ジョブ作成から作成画面を開き、
ジョブの名前とジョブの種類を選択します
今回はUnityBuild_Androidとし、ジョブの種類はフリースタイルにしました
本来だとビルドから配布までのような処理の時はパイプラインの方が並列実行を制御したり色々細かい事ができたりするのですが、今回のシリーズでは一番シンプルなフリースタイルでシェルを書いていく感じで実装していこうと思います。
プロジェクトが完成しました。
次回以降はこのプロジェクトで実際にアプリのビルドをしていきます!
なるべく早く次の更新するようにしますのでお楽しみに!
---------------------------------
余談:GraffityでのJenkins運用
GraffityではJenkinsを使ったビルドを誰でもできる(エンジニア以外でも)ようにするためにSlackを使ったビルド環境を構築しています。
実際に使ってる様子がこんな感じです↓
slackにいるJenkinsおじさん(hubotで動いている)にビルドブランチなどを記入したコマンドを投げるとhubotが受け取り、Jenkinsに対してビルドをするよう送る事でビルドが始まります。
ビルド完了後に自動でDeployGateへアップロードし、そのURLを通知するようにしています。
この方法のメリットはJenkins本体をいじる事が減るので謎に設定変わったりする心配をしなくていい(権限設定ちゃんとしろ話ではある)事や、Slackが使える人ならメンバーが自由にビルドを掛けれる点です。
あとやたらJenkinsおじさんに愛着湧きます。
このあたりのHubot構築の話も紹介したいと思っているのでお楽しみに!
---------------------------------
Jenkinsおじさんが居るGraffityについてはこちら!