日々常々

ふつうのプログラマがあたりまえにしたいこと。

WindowsのコマンドからJenkinsのJobを実行する

……なんて需要がどれだけあるのか判りませんが。

JenkinsのJobを実行する方法


赤丸の実行ボタンをクリックするだけですね。
つまりコマンドでやりたかったら、このアドレスにHTTPリクエストを投げればいいんです。右クリックから「ショートカットのコピー」とか選べばクリップボードに入りますので、それ。今回はこんなアドレスになりました。

http://localhost:8080/job/hoge/build?delay=0sec

このアドレスをブラウザのアドレスバーにでも入れれば、それでJobが動くことがわかると思います。単純に言えばHTTPリクエストが送れれば良い。

どうやって叩くか?

wgetとかcurlとか素直なコマンドがあればいいんですが、ないです。
一応何かしらインストールすればどうとでもなるんですが、あえて素のWindowsということで。しかも今ホットなXPで、PowerShellとかも入れてないって感じです。

どうせJava入ってるんだからJavaから……はめんどいからGroovyでおkとか思ったりするんですが、なんか「何言ってんだこいつ」と思われるのもやなんで、コマンドだけで……どこからどこまでがコマンドだけになるのかわかんねーです。

HTTPリクエストが送れれば良いんだからTELNETでいいんじゃ?と思ったんですが、なんかWindowstelnetよく判らん動きしやがりましたんで諦めました。

でまぁそうなるとWSHVBScriptでいいかと思ったんですが、宗教上の理由で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使えれば多少変わるのかもしれませんが。
でも端末とか環境は仕方のない所もあるし、だからといって諦めなくても方法はなくもなかったりする。そんな感じのお話でした。