WindowsのコマンドからJenkinsのJobを実行する
……なんて需要がどれだけあるのか判りませんが。
JenkinsのJobを実行する方法
赤丸の実行ボタンをクリックするだけですね。
つまりコマンドでやりたかったら、このアドレスにHTTPリクエストを投げればいいんです。右クリックから「ショートカットのコピー」とか選べばクリップボードに入りますので、それ。今回はこんなアドレスになりました。
このアドレスをブラウザのアドレスバーにでも入れれば、それでJobが動くことがわかると思います。単純に言えばHTTPリクエストが送れれば良い。
どうやって叩くか?
wgetとかcurlとか素直なコマンドがあればいいんですが、ないです。
一応何かしらインストールすればどうとでもなるんですが、あえて素のWindowsということで。しかも今ホットなXPで、PowerShellとかも入れてないって感じです。
どうせJava入ってるんだからJavaから……はめんどいからGroovyでおkとか思ったりするんですが、なんか「何言ってんだこいつ」と思われるのもやなんで、コマンドだけで……どこからどこまでがコマンドだけになるのかわかんねーです。
HTTPリクエストが送れれば良いんだからTELNETでいいんじゃ?と思ったんですが、なんかWindowsのtelnetよく判らん動きしやがりましたんで諦めました。
でまぁそうなるとWSHでVBScriptでいいかと思ったんですが、宗教上の理由でVBは云々なのでやめました。ってことでJScriptで。VBScriptでもたいしてかわらない。
やってみた
var obj = WScript.CreateObject("MSXML2.XMLHTTP"); obj.open("GET", "http://localhost:8080/job/hoge/build?delay=0sec"); obj.send(); while(obj.readystate < 2) { WScript.Sleep(1000); }
最初は呼べば即終了でいいと思ってたのですが、リクエスト完了するの待たないといけないっぽい。`readystate != 0` でもいける気がしたんですが、なんかダメでした。てことでこんな感じ。
あとは上記のを適当に hoge.js とかで保存して、こんな感じのバッチを書けばいいかな。
cscript hoge.js
あとはこれをフックスクリプトに云々とか。その辺。
ご注意
実際はJenkinsを誰でも自由に触れる状況にしておくのはよろしく無くて、気休めでもパスワードかけといた方がいいと思うです。Jenkinsのセキュリティを有効にすると「画面は見えるけどJobを作ったり消したり実行したりはできない」状態になって、上記のだけだと実行は出来ません。そうした場合でもトークンとかあるので、それをアドレスに含める形ですればできます。
あと正攻法では Jenkins CLI - 日本語 - Jenkins Wiki とか Remote access API - 日本語 - Jenkins Wiki とかとかございます。今回紹介したのはあくまで手軽な「出来るよ?一応。」な方法でございます。
蛇足
コマンドから実行するのに素のWindowsXPとか正直ないと思うんですよ。この手のはPowerShell使えれば多少変わるのかもしれませんが。
でも端末とか環境は仕方のない所もあるし、だからといって諦めなくても方法はなくもなかったりする。そんな感じのお話でした。