[CI] concourseでUnityのビルドをCIしてみる – 導入編

お世話になっております。
しゃまとんです。

Unityで開発をしているとビルド作業が煩わしくなって自動化したい…なんて話になると思います。
それで導入となるとどのCI導入するのかという話になり、Jenkinsで環境構築をするのが主流なのかなと感じています。
Travis CICircle CIとかあるけど、ローカルな環境で〜という話)

ただ、世の中では
「Jenkinsおじさん」
という問題が各所で発生しており、辛い現状があるのも事実なようです。

UnityにおいてはUnity Cloud Buildがありますが、Unityのサービスなので他のプロダクト(例えばサーバサイドのAPIサービス)とかには使えません。
できるなら、1つのCI環境で管理したいですよね。

私としては以下のような希望がありまして
・UnityのiOS / Androidビルドが行える
・Unity以外プロダクトにも使える(サーバサイドのテスト、ひいてはデプロイ)
・属人化しないと嬉しい(Infrastructure as Codeのようなもの)

なにか他にいいしーあいないかなーと探してみたところconcourseと出会いました。concourseは比較的新しいOSSによるCI/CDツールのようですが、ヤフー等の企業でも導入が進んでいるようです。 目立った特徴を見た感じだと
・dockerを使って、CI環境を構築できる
・workerはコンテナ、ネイティブどちらでも動作可能
・操作はすべてCLI
・結果をGUIで確認できる
(詳細はこちらにあります)

workerがどちらでも動作するので、MacでUnityのビルド走らせつつ、コンテナでサーバサイドのテストとかできそう。
ということで、要件を満たしてくれそうなのでやってみることにしました。
ここから導入になるのですが、先人の記事を参考にしてこの記事も書いているため、新しいバージョンでは動作しない恐れがあります。
この時、導入時にハマったところも含め記載するのですが、ご留意ください。

まず、docker/docker-composeの導入ができてない方は下記を参考にして、使えるようにしましょう。(他力本願)

次に作業用ディレクトリを作成して、動作に必要な鍵を作っておきます。ssh-keygenを使えばいいのですが、 生成時のオプション指定に注意する必要がありました。
github issue : panic: runtime error: invalid memory address or nil…
できたら、docker-compose用のconcourse構成を下記のようにして作成します。
environmentは環境変数から設定しても構いません。CONCOURSE_EXTERNAL_URLは他のPCをworkerとして使う場合はlocalhostではなく、
IPアドレスかホスト名を設定してください。

用意できたら、docker-compose upしてみましょう。
はじめは正常に起動しているかログを確認したほうがよいでしょう。
failed や unreachable などのワードが見えたら、どこかしらがうまく行ってないと思います。
問題なければ、http://localhost:8080にアクセスすれば、welcome to concourseと表示されます。
test : testでログインできるかも確認してみましょう。
次にネイティブで動くworkerを動作させます。
動作させるには、concourseのCLIを使う必要があります。こちらから
から各OSに適したものを取得してください。今回はmacなのでconcourse-X.X.X-darwin-amd64.tgzを取得しました。
展開するとconcourse / flyコマンドがありますので、適宜パスを通すなどしましょう。 workerの起動はホストや鍵を設定して行います。working directoryは勝手に生成されます。
こちらも実行直後はログをみて、起動に失敗してないかチェックしてみましょう。 worker.beacon-runner.beacon.registered等出ていれば良いと思います。

これで導入が終わりました。
次は、pipelineを作って実行していきます!

■ 参考