LoginSignup
10
8

More than 5 years have passed since last update.

MACへJenkinsをインストール(分散ビルド編)

Last updated at Posted at 2015-10-28

MAC(複数台)の分散ビルド

前提

  • 用意するもの

    • MAC複数台
    • ツール/ライセンスをMAC数分 (私のケースだと「Unity Pro」ライセンスがMAC台数分必要でした)
  • できること

    • ジョブ(ビルド)の分散
  • できないこと(やり方が分からないので誰か知ってたら教えてほしい)

    • 分散の優先順変更
    • ワークスペースのクリア(後述:カスタムワークスペースとの連携)

手順

指示を出すMAC=マスターMAC
処理をするMAC(たち)=スレーブMAC
とします。
※ MACのスペック差があるのでしたら、スレーブMAC の方に高スペックを割り当てた方が無難です。

1.マスターMACにJenkinsを入れる

2.「Jenkinsの管理」-「ノードの管理」-「新規ノード作成」を選択

  • 「ダムスレーブ」→「OK」

  • 「同時ビルド数」
    スレーブMACに同時に任せられるジョブ数

  • 「リモートFSルート」
    スレーブMACのどこにworkspaceを配置するか
    例)/Users/Shared/hoge_mac_slave どのMACからのスレーブフォルダかわかるようにしておいた方がいいと思う。

  • 「用途」
    「このスレーブをできるだけ~」とするとマスターMACの全てのジョブをスレーブでやろうとしちゃうので、個人的には「このマシーンを特定のジョブ専用にする」にしておく

  • 「起動方法」
    「SSH経由で~」にして、「ホスト=スレーブMACのIPアドレス」、「認証情報=スレーブMACのログインIDとパスワード」
    (※スレーブMACの共有設定-リモートログインに許可をいれておく)

で「保存」

3.マスターMACでジョブを作成

  • 「実行するノードを制限」

「slave01(※さきほど作ったノード名) || master(自分自身)」
とすると、スレーブMAC→(忙しければ)マスターMACの順にビルドをしてくれる
※これをマスターMAC→(忙しければ)スレーブMAC にできないものか…

これでOK

Tips

Unityビルドをする場合

「Unity3d plugin」を入れている場合、
「jenkinsの管理」で「Unity3d」を設定していると思われる。
そのためマスターMACとスレーブMACのUnityの名前と置き場所は同じにしておかないとエラーになる!

MAC Unityの名前 Unityの置き場所
マスターMAC Unity5.0.2 /Application/Unity5.0.2
スレーブMAC /Application/Unity502

マスターMAC中心で「Unity5.0.2」でビルドと設定していると、スレーブMACの「/Application/Unity5.0.2」フォルダを探してしまう。。。
マスターMACとスレーブMACで置き場所を統一しておかないといけない。

上流/下流プロジェクトを使う場合

ジョブAをマスターMACでやってその成果物を使ってジョブBをしてもらうはずが、ジョブBがマスターMACで実行されてしまった!?→そしてエラー…。

ジョブを同じノードで実行するには
「Parameterized Trigger Plugin」
というJenkinsプラグインをインストールしておく

  1. 上流ビルドのビルド後の作業に「Trigger build without parameters」で下流ビルドを追加 標準メニューの「他のプロジェクトのビルド」をこっちに置き換える
  2. 「Add Parameters」で「Build on the same node」を設定 これで、上流ビルドと同じノード(MAC)で下流ビルドを行ってくれます!

カスタムワークスペースとの連携

正直文章ではうまく説明できる気がしないのだが・・・。

▼まず、ノードで急にフォルダ構成を変えてくるJenkinsさん。。。

  • Jenkins(Master)のデフォルトのワークスペース
/{JENKINS_HOME}/jobs/{JOB_NAME}/workspace
  • Jenkins(slave)のデフォルトのワークスペース
/{リモートFSルート}/workspace/{JOB_NAME}
※リモートFSルート:ノード設定で設定したパス

What's!? なぜにフォルダ構成を変えるのかJenkinsさんよ・・・・
まあ普通のビルドならそれでも良いです。
ただ、これがカスタムワークスペースと非常に相性が良くない!!(と個人的に思った)

▼具体的な問題

JOB_AAAをJOB_BBBのワークスペースで一緒にやろうとしていた。
マスターだけでやっていた時は、JOB_AAAのカスタムワークスペースに「jobs/JOB_BBB/workspace」と記述するだけで同じワークスペースを使ってくれていた。

しかし、こいつがスレーブ(ノード)で動かすと…
JOB_AAAは「/{リモートFSルート}/jobs/JOB_BBB/workspace」
JOB_BBBは「/{リモートFSルート}/workspace/JOB_BBB」(※ 上記デフォルトのワークスペース参照)
とそれぞれ別のワークスペースで実施されていた。。。

▼最終的にやったこと

  • JOB_HOMEという環境変数をマスター(システムの設定)、スレーブ(ノードの設定)で作成。
master.
JOB_HOME=${JENKINS_HOME}/jobs
slave.
JOB_HOME=/Users/Shared/hoge_mac_slave/jobs
  • 全てのジョブにカスタムワークスペースを適用
カスタムワークスペース.
${JOB_HOME}/JOB_BBB(ジョブ名)/workspace

こうすることで、マスターのワークスペースを維持した状態で、かつスレーブの意図したところにワークスペースを作成できる

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8