PowerShellでJenkinsのJNLP Slave起動のショートカットを作る

WindowsUpdateの自動実行が上手く動かないのに社内にWSUSが無いので手動やってたけど、いい加減バカバカしくなってきたのでJenkinsでなんとか出来ないか試行錯誤した過程でいろいろとノウハウを得たので忘れないようにメモしておく。

JenkinsのWindows Slaveを作る時に経験上Java Web Start(JNLP)でやるのが1番トラブルが少ないと思うのですが、いちいち設定するのが面倒なので多少楽にしようとあらかじめ作成した起動バッチのショートカットをAllUsersのスタートアップに作ります。

  • C:\jenkinsフォルダを作成
  • slave.jarをコピー
    • slave.jar は http://jenkins.example.com/jnlpJars/slave.jar にあります
  • 以下のJNLP起動バッチもコピーしてNODEとSECRETを自分のノードのものに書き換えます

NODEとSECRETは、Jenkinsの管理 > ノードの管理 > ノードを選択 > システム情報環境変数の所で見れます。
URLは、 http://jenkins.example.com/computer/${nodename}/systemInfo です。

@echo off

set NODE=win1
set SECRET=xxxxxxxxxxxxxx

cd C:\jenkins
start /min java -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -jar C:\jenkins\slave.jar -jnlpUrl http://jenkins.example.com/computer/%NODE%/slave-agent.jnlp -secret %SECRET%

C:\jenkinsにcdしているのはstartupから起動するとカレントディレクトリがC:\Windows\System32で起動するため想定しているのと違うjavaが起動してしまう事があったからです。
エンコーディングUTF-8にしているのはJenkinsのコンソールが文字化けしないようにしているためです。

  • 以下のショートカット作成PowerShellを流す
$WsShell = New-Object -ComObject WScript.Shell

$Shortcut = $WsShell.CreateShortcut($env:ALLUSERSPROFILE + "\Microsoft\Windows\Start Menu\Programs\Startup\jenkins-jnlp.lnk")
$Shortcut.TargetPath = "C:\jenkins\jenkins-jnlp.bat"
$Shortcut.IconLocation = "C:\jenkins\jenkins-jnlp.bat"
$Shortcut.Save()

念のために、デスクトップにも作りたければ以下のようにしておきます。

$Shortcut = $WsShell.CreateShortcut($env:PUBLIC + "\Desktop\jenkins-jnlp.lnk")
$Shortcut.TargetPath = "C:\jenkins\jenkins-jnlp.bat"
$Shortcut.IconLocation = "C:\jenkins\jenkins-jnlp.bat"
$Shortcut.Save()

全ユーザのデスクトップに出ます。

ちなみにWindows7より古いのは考慮してないです。
あとJREは入れてある想定・・・。