初老ゲームプログラマの覚え書き

JenkinsのスレーブをWindowsサービスとして動かしたい

スレーブ(Windows)側の設定

  1. Javaをインストールする
  2. レジストリエディタでHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\SystemにLocalAccountTokenFilterPolicyという名前で作って、DWord (32-bit) で1を設定
  3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winregにマスターのノード設定で管理者(Administorators)にするユーザーにフルコントロールを与える。
  4. HKEY_CLASSES_ROOT\CLSID\76A64158-CB41-11D1-8B02-00600806D9B6}を右クリック→アクセス許可→詳細設定→所有者を管理者(Administorators)に変更。マスターのノード設定で管理者ユーザーにするユーザーにフルコントロールを与える。そのあとに、所有者をNT SERVICE¥TrustedInstallerに戻す
  5. WindowsサービスのRemote Registry Serviceを起動
  6. ファイヤウォールでTCPのポート 135, 139, 445 を受信許可
  7. ファイヤウォールでUDPのポート 137, 138 を受信許可
  8. ファイヤウォールでC:\WINDOWS\system32\dllhost.exe を受信許可

マスター側の設定

  1. Jenkinsのページを開いて、新規ノードを追加
  2. リモートルートはスレーブに置かれるJenkinsのワークスペースの位置になるので好きなところを選択
  3. 起動方法は、WindowsサービスとしてこのWindowsスレーブを制御 を選択
  4. スレーブ(Windows)の管理者ユーザー名とパスワードを入力
  5. スレーブのサービスを動かすユーザーは、基本Use Local System Userで良い。他のユーザーにしたり、管理者ユーザーを使うこともできる。Incredibuildを使用時に問題が発生したので Use Administrator account given above を選択して管理者ユーザーを利用して解決した。
  6. 保存
  7. 保存した後は、Jenkinsマスター側が自動的にリモートルートの位置にjarとかexeとかをもりもりコピーし、気が付くとWindowsサービスにJenkinsスレーブサービスが出来上がり勝手に起動します。

 

ユーザー名の先頭に .\ を付けなかった場合, 以下のようなログが出てスレーブの起動に失敗する

ERROR: Failed to create a service: Status Invalid Service Account