phpでジェンキンスのジョブを実行するコードを書いたので晒してみます。 パラメータ付きビルド、パラメータなしビルド両方に対応できるように致しました。
ジェンキンスのトークンを使用しますので、取得をお願いいたします。 取得方法はこちらなどを参考に。 Jenkinsのジョブをリモートから実行する方法
また、今回必要がなかったのでやってませんが、 場合によってはURLのエンコードが必要になるかもしれません。
では、ソースコードです。
ソースコード
<?php
/**
* コントローラー
*/
function controller() {
$servername = "XXXXXXXXXXXXXXXX";
$username = "XXXXXXXXXXXXXXXX";
$api_token = "XXXXXXXXXXXXXXXX";
$job_name = "XXXXXXXXXXXXXXXX";
$parameters = [
"param1" => "value1",
"param2" => "value2",
];
$result = doJenkinsJob($servername, $username, $api_token, $job_name, $parameters);
}
/**
* jenkinsのジョブを実行する
* @param {String} $servername - サーバ名
* @param {String} $username - ユーザ名
* @param {String} $api_token - APIトークン
* @param {String} $job_name - ジョブ名
* @param {Array} $parameters - パラメータ。パラメータなしの場合は空配列を指定。
* @return 実行結果
*/
function doJenkinsJob($servername, $username, $api_token, $job_name, $parameters = array()) {
$context = stream_context_create([
'http' => [
'method'=> 'POST',
]
]);
$url = "http://{$username}:{$api_token}@{$servername}/job/{$job_name}/";
if(count($parameters) > 1) {
$url .= "buildWithParameters";
return file_get_contents($url . '?' . http_build_query($parameters), false, $context);
} else {
$url .= "build";
return file_get_contents($url, false, $context);
}
}
?>
controller()内の変数に環境に合わせて設定をしてください。 あとはcontroller()を実行すればビルドが走るはずです。 パラメータなしのビルドの場合は$parameters = [];と空配列を渡せば良いです。
ビルドできましたでしょうか。
余談
curlコマンドでもジョブを実行できます。 要はPOST形式でジェンキンスにリクエストを飛ばせれば良い。
curl -X POST --user ${USER_NAME}:${API_TOKEN} \
http://${HOST_NAME}/job/${JOB_NAME}/buildWithParameters?${パラメーター}