phaaaaantomのメモ帳

業務や趣味で弄ったプログラム、ツールのメモ。間違い等ありましたらご指摘お願いします。

Jenkins導入から運用⑤ スレーブノードの設定

Jenkinsには他のマシンにビルドを分散処理させるスレーブ機能がついてる

最初他のマシンのCPU借りて処理させて結果を受け取る仕組みがなのかと思ったのだけど
他のマシンで設定されたビルドを実行するってことでちょっと拍子抜け

つまりは同じ環境が入ったマシンが複数無いといけないわけなんだけど
1. ビルドしなくちゃいけないプロジェクトが複数ある
2. subversionとかでチェックアウトできる
3. 空いてるPCが複数台ある

みたいな感じだとスレーブ機能がアツい感じになる

ホスト側(Jenkins入ってるマシン)設定

  • 「Jenkins」→「Jenkinsの管理」→「ノードの管理」へ
  • 左サイドバーの「新規ノード作成」を選択
  • ノード名を入れてダムスレーブを選択(好きな名前で)

  • 説明 : 適当に
  • 同時ビルド数 : マシンスペックに応じて
  • リモートFSルート : スレーブマシン上のマスターノードのホームディレクトリ
     ("C:\jenkins"とかでいいと思う)
  • ラベル : 特定のOSが入ってるPCでのみビルド って感じの指定に使える
    (windows_build_slaveとかmac_build_slaveとかついてるとわかりやすい) f:id:phaaaaantom:20131119003458p:plain

起動方法は「JNLP経由でスレーブを起動」でOK で保存

Jenkinsが入ってるPC側の設定

  • C:\Program Files\Jenkins\war のWEB-INFを右クリでプロパティ
  • 共有タブ→詳細な共有 で このフォルダを共有するにチェック

スレーブ側の準備

  • 適当な場所にバッチファイル作って
java -jar \\[※1]\WEB-INF\slave.jar -jnlpUrl http://[※1]//computer/[上で設定したノード名]/slave-agent.jnlp  
※1 Jenkinsが入ってるPCのIPアドレス  

を書いて保存しとく(名前は適当にconnect_slave.batとかで)
ノード名を○○_0~4とかにしとくと

for /l %%i in (1,1,4) do ( 
java -jar \\[※1]\WEB-INF\slave.jar -jnlpUrl http://[※1]//computer/○○_%%i/slave-agent.jnlp  
)  
※1 Jenkinsが入ってるPCのIPアドレス  

こんな感じでfor文で回して空いてるスレーブに接続って感じで楽

バッチを作ったら他のスレーブにするマシンにもコピーして準備完了

接続

スレーブ側でさっき作ったバッチを実行すると
test_node_0の部分が接続中になるのでこれで完了

あとはビルドを走らせるとmasterとtest_node_0の2台で作業分担する

ただし一番最初に書いたとおり

他のマシンで設定されたビルドを実行する

ってだけなのでビルドして出力されたもの(exeとか)がほしい場合は
「Windowsバッチコマンドの実行」にコピーする内容やら場所やら書いとく必要がある

大体こんな感じで使えるようになるはず

Jenkins導入から運用① インストール~初期設定 - phaaaaantomのメモ帳
Jenkins導入から運用② プラグインの導入 - phaaaaantomのメモ帳
Jenkins導入から運用③ プロジェクトの作成 - phaaaaantomのメモ帳
Jenkins導入から運用④ ビルドパラメータの設定 - phaaaaantomのメモ帳
Jenkins導入から運用⑤ スレーブノードの設定 - phaaaaantomのメモ帳