JenkinsのLibvirt Slave Pluginの使い方をまとめました。
SlaveはDebian 8です。
Table of Contents
1 Libvirt Slave Pluginとは
Jenkinsはリモートマシンをテスト実行環境のSlaveとして使います。
libvirtで制御された仮想マシンも、ssh等でリモート接続できるならば、リモートマシンとしてSlaveとして使うことができます。
Libvirt Slave Pluginはlibvirtのインターフェースを使用して仮想マシンの起動と停止を制御します。
これにより、テスト実行時に仮想マシンを起動し、テスト終了時に仮想マシンを停止することが可能になります。
2 Libvirt Slave Pluginのインストール
Jenkinsのプラグイン制御画面からインストールします。
Jenkinsの管理 -> プラグインの管理 -> 利用可能
3 libvirt-binパッケージのインストール
libvirtが必要なのでlibvirt-binをインストールします。
$ sudo apt-get install -y libvirt-bin
virshでlibvirtの仮想環境に接続できるか確認します。
ここで接続できない場合は仮想環境側の設定を見直す必要があります。
今回はJenkinsとは別マシンのlibvirtのKVM仮想環境を用いるので、ssh経由で接続します。
$ virsh -c qemu+ssh://hiroom2@acer/system list Id Name State ---------------------------------------------------- 161 debian-8-jenkins-test running
4 ハイパーバイザの追加
システムの設定のクラウドからハイパーバイザを追加します。
Jenkinsの管理 -> システムの設定 -> クラウド
クラウドを追加し、高度な設定ボタンを押します。
Hypervisor Type | ハイパーバイザーの種類(今回はQEMU) |
Hypervisor Host | ハイパーバイザーが動作するホスト名 |
Username | ハイパーバイザーを操作するユーザ名 |
Concurrent Slaves Capacity | 同時起動可能なSlaveの数 |
Native Credentials | ssh接続時のユーザ名とパスワード |
ssh接続の認証に公開鍵を用いている場合、Native Credentialsは不要です。
Test Connectionで接続を確認します。
5 Slaveの作成
ノードの管理画面から新規ノードを作成します。
Jenkinsの管理 -> ノードの管理 -> 新規ノード作成
ノード名を入力し、Slave virtual computer running on a virtualization platform (via libvirt)にチェックを入れます。
Libvirt Slave Pluginで追加される設定は以下の通りです。
その他の設定項目についてはLibvirt Slave Pluginを用いないノードと同様です。
Virtual Machine | 制御する仮想マシン |
Startup Idle | 仮想マシン起動をウェイトする秒数 |
Time to Retry Startup | ウェイトのリトライ回数 |
Shutdown Method | 仮想マシンを停止する方法 |
Shutdown Methodについてはshutdownかsuspendをお勧めします。
これらは仮想マシンのacpidが受信します。
テスト実行時に仮想マシンを起動し、テスト終了後に仮想マシンを停止する為に、Availabilityを「要求時にはオンラインにし、待機中にはオフラインにする」にします。
要求時の遅延時間 | 仮想マシン起動までのウェイトを1分単位で設定 |
待機時の遅延時間 | 仮想マシン停止までのウェイトを1分単位で設定 |
待機時の遅延時間の最小値は1です。
6 acpidの確認ダイアログ
電源ボタン押下のイベントを受信し、poweroffコマンドを実行します。
Ubuntu 14.04の場合、poweroffコマンドを即座に実行せずに確認ダイアログが表示されます。
これはJenkinsによるテスト終了時に仮想マシンを停止するという目的に反してしまします。
ログイン中に電源ボタンが押された場合の処理はgsetting等でできるようですが、ログイン画面が表示されている場合の処理はacpidの設定ファイルを修正する必要があるようです。
電源ボタン押下時にpoweroffコマンドを実行するようにacpidの設定ファイルを変更します。
本変更後、acpidの再起動が必要です。
$ diff -uprN /etc/acpi/events/powerbtn{.org,} --- /etc/acpi/events/powerbtn.org 2015-06-22 04:54:31.193001314 +0900 +++ /etc/acpi/events/powerbtn 2015-06-22 04:54:52.102540555 +0900 @@ -10,4 +10,4 @@ # of kernel changes. event=button[ /]power -action=/etc/acpi/powerbtn.sh +action=poweroff $ /etc/init.d/acpid restart
7 ジョブの設定
テストを実行するノードをlibvirtで制御された仮想マシンに制限します。
以上で設定は完了です。
仮想マシンを停止した状態でテストをスケジューリングすると仮想マシンが起動します。
しばらく時間が経つとテスト結果がJenkinsに反映され、仮想マシンが停止します。