しゃまとんです。
Unityで開発をしているとビルド作業が煩わしくなって自動化したい…なんて話になると思います。
それで導入となるとどのCI導入するのかという話になり、Jenkinsで環境構築をするのが主流なのかなと感じています。
(Travis CIやCircle 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…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mkdir concourse_sample cd concourse_sample mkdir -p keys/web ssh-keygen -t rsa -f ./keys/web/tsa_host_key -N '' -m PEM ssh-keygen -t rsa -f ./keys/web/session_signing_key -N '' -m PEM mkdir -p keys/worker ssh-keygen -t rsa -f ./keys/worker/worker_key -N '' -m PEM ssh-keygen -t rsa -f ./keys/worker/darwin_worker_key -N '' -m PEM cat ./keys/worker/worker_key.pub >> ./keys/web/authorized_worker_keys cat ./keys/worker/darwin_worker_key.pub >> ./keys/web/authorized_worker_keys cp ./keys/web/tsa_host_key.pub ./keys/worker |
environmentは環境変数から設定しても構いません。CONCOURSE_EXTERNAL_URLは他のPCをworkerとして使う場合はlocalhostではなく、
IPアドレスかホスト名を設定してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
version: '3' services: concourse-db: image: postgres environment: POSTGRES_DB: concourse POSTGRES_USER: concourse_user POSTGRES_PASSWORD: concourse_pass PGDATA: /database concourse-web: image: concourse/concourse command: web restart: unless-stopped depends_on: [concourse-db] ports: ["8080:8080", "2222:2222"] volumes: ["./keys/web:/concourse-keys"] environment: CONCOURSE_EXTERNAL_URL: http://localhost:8080 CONCOURSE_BASIC_AUTH_USERNAME: auth_user CONCOURSE_BASIC_AUTH_PASSWORD: auth_pass CONCOURSE_POSTGRES_HOST: concourse-db CONCOURSE_POSTGRES_USER: concourse_user CONCOURSE_POSTGRES_DATABASE: concourse CONCOURSE_POSTGRES_PASSWORD: concourse_pass CONCOURSE_ADD_LOCAL_USER: test:test CONCOURSE_MAIN_TEAM_LOCAL_USER: test concourse-worker: image: concourse/concourse privileged: true depends_on: [concourse-web] command: worker volumes: ["./keys/worker:/concourse-keys"] environment: CONCOURSE_TSA_HOST: concourse-web:2222 |
用意できたら、docker-compose upしてみましょう。
はじめは正常に起動しているかログを確認したほうがよいでしょう。
failed や unreachable などのワードが見えたら、どこかしらがうまく行ってないと思います。
問題なければ、http://localhost:8080にアクセスすれば、welcome to concourseと表示されます。


動作させるには、concourseのCLIを使う必要があります。こちらから
から各OSに適したものを取得してください。今回はmacなのでconcourse-X.X.X-darwin-amd64.tgzを取得しました。
展開するとconcourse / flyコマンドがありますので、適宜パスを通すなどしましょう。
1 2 3 4 5 6 |
tar -xvzf concourse-X.X.X-darwin-amd64.tgz cd concourse tar -xvzf fly-assets/fly-darwin-amd64.tgz # 下記のコマンドに適宜パスを通す ./bin/concourse ./fly-assets/fly |
こちらも実行直後はログをみて、起動に失敗してないかチェックしてみましょう。
1 2 3 4 |
concourse worker --work-dir ./working_sample \ --tsa-host localhost:2222 \ --tsa-public-key ./keys/worker/tsa_host_key.pub \ --tsa-worker-private-key ./keys/worker/darwin_worker_key |
これで導入が終わりました。
次は、pipelineを作って実行していきます!
■ 参考