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
にあります
- 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()
全ユーザのデスクトップに出ます。