JenkinsのスレーブをWindowsサービスとして動かしたい
スレーブ(Windows)側の設定
- Javaをインストールする
- レジストリエディタで
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
にLocalAccountTokenFilterPolicy
という名前で作って、DWord (32-bit) で1
を設定 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg
にマスターのノード設定で管理者(ここではjenkins)にするユーザーにフルコントロールを与える。HKEY_CLASSES_ROOT\CLSID\76A64158-CB41-11D1-8B02-00600806D9B6}
を右クリック→アクセス許可→詳細設定→所有者を管理者(ここではjenkins)に変更。マスターのノード設定で管理者ユーザーにするユーザーにフルコントロールを与える。- WindowsサービスのRemote Registry Serviceを起動
- ファイヤウォールでTCPのポート 135, 139, 445 を受信許可
- ファイヤウォールでUDPのポート 137, 138 を受信許可
- ファイヤウォールでC:\WINDOWS\system32\dllhost.exe を受信許可
マスター側の設定
- Jenkinsのページを開いて、新規ノードを追加
- リモートルートはスレーブに置かれるJenkinsのワークスペースの位置になるので好きなところを選択
- 起動方法は、WindowsサービスとしてこのWindowsスレーブを制御 を選択
- スレーブ(Windows)の管理者ユーザー名(ここではjenkins)とパスワードを入力
- スレーブのサービスを動かすユーザーは、基本Use Local System Userで良い。他のユーザーにしたり、管理者ユーザーを使うこともできる。Incredibuildを使用時に問題が発生したので Use Administrator account given above を選択して管理者ユーザーを指定して解決した。
- 保存
- Jenkinsマスター側が自動的にスレーブのルートの位置にjarとかexeをコピーします。しばらくするとWindowsサービスにJenkinsスレーブサービスが作成され起動します。
スレーブ(Windows)側の設定
Jenkinsマスターからコピーされたjenkins-slave.exeがサービスに登録されるので、ログオンユーザーを管理者ユーザー名(ここではjenkins)に変更する
ユーザー名の先頭に .\ を付けなかった場合, 以下のようなログが出てスレーブの起動に失敗する
ERROR: Failed to create a service: Status Invalid Service Account
ERROR: Message not found for errorCode: 0xC0000001
at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenHKCR(JIWinRegStub.java:121)
139ポート (NetBIOS セッションサービス) と 445ポート (Windows共有) が利用できない場合は、次のようなメッセージが表示されます。
または、リモートレジストリサービスが起動が起動しているか確認して下さい。
該当のエントリ HKEY_CLASSES_ROOT\CLSID{76A64158-CB41-11D1-8B02-00600806D9B6} のOwnerをJenkinsで使うユーザーに変更し、そのユーザーのフルコントロールにする。