はじめに
Jenkinsのスレーブを仮想マシンで実現しているとして、仮想マシン自体の起動やシャットダウンをどうするかというと、一番楽なのはホストマシン起動時に合わせて仮想マシンも起動させて動作させっぱなしにする、というやり方だと思います。
しかし、頻繁にそのスレーブを使うならまだしも、たまにしか使わないのに仮想マシンを起動しっぱなしにするのはリソースの無駄遣いと言えます。
そうなると、仮想マシンの起動やシャットダウンをJenkinsから行いたいというのが人情で、実際例えばVirtualBoxですとVirtualBox Pluginというものがあり、必要に応じてVirtualBoxの仮想マシンを操作することができます。
ところが、我らがVMware Fusionにはそういうものが無く、仕方ないのでlaunchdでvmrunさせることで仮想マシンの自動起動をさせていたわけですが、OS X on OS Xなんてやっていると結構な負担なのでこれをどうにかしたいと思っていました。
Scripted Cloud Pluginでスレーブを作る
調べてみると、Scripted Cloud Pluginというものが見つかり、これで実現できるのではと思い、トライしてみました。あと、日本語の解説が全く見つからなかったのでチャレンジしてみたというのもあります。
Scripted Cloud Pluginでスレーブを作るには、2つの手順を踏みます。
- Scripted Cloudを作る
- 作成したScripted Cloudを用いたスレーブを作る
Scripted Cloudを作る
Scripted Cloudを作るには、[Jenkinsの管理]->[システムの設定]の[クラウド]で[scripted Cloud]を作成します。
それぞれ、クラウドの名前、VM起動スクリプトのパス、VM終了スクリプトのパスを記載します。
この手順がプラグインの公式サイトでも簡単にしか説明されていなくて戸惑ったのですが、設定内容がシンプルなので実際はそんなに困らないです。
VMの起動/終了は、VMware Fusionではvmrunを使用するため、スクリプトの内容は以下の様な感じになります。
#! /bin/bash -ex
VM_PATH="/path/to/"${SCVM_NAME}".vmwarevm/"${SCVM_NAME}".vmx"
VMRUN="/Application/VMware Fusion.app/Contents/Library/vmrun"
ssh cloudhost "\"${VMRUN}\" start \"${VM_PATH}\" nogui"
#! /bin/bash -ex
VM_PATH="/path/to/"${SCVM_NAME}".vmwarevm/"${SCVM_NAME}".vmx"
VMRUN="/Application/VMware Fusion.app/Contents/Library/vmrun"
ssh cloudhost "\"${VMRUN}\" stop \"${VM_PATH}\""
スレーブを作る
スレーブ作成の方はプラグインの公式サイトでちゃんと説明されているので、そちらを参照されたほうが良いかと思います。
設定項目の、[Virtual Machine Name]から[What to do〜]は変数としてScripted Cloudの設定で指定したstart/stopスクリプトで使用できるため、切断時の扱いに応じて処理を変えるとかもできます。
最後に
このプラグインはあくまでVMの起動と終了だけを管理するものなので、スレーブの起動設定(sshかJNLPかとか)は通常のスレーブ作成方法そのままということでスレーブを作り慣れた人にも安心です。