概要
とある Jenkins ジョブは、入力パラメータとして以下を持つものとする.
|パラメータ名|型|用途|
|:--|:--|:--|:--|
|UPLOAD_FILE|文字列|Jenkins ジョブに投じられるファイル|
|FILEPATH|文字列|上記 UPLOAD_FILE の元パス情報|
本記事では、Jenkins CLI を使って、
実行済みジョブからこの「FILEPATH」に設定された値を取り出す例である.
なお、試行錯誤したので、参考にしたサイトなどはメモできなかった.
手順
1. GET「ジョブ名/ジョブ番号/api/json?build&depth=1」を発行する
本例の場合は以下である.
$ curl -X GET --user 'ユーザ名:APIキー' \
'http://IP:PORT/job/ジョブ名/ジョブ番号/api/json?build&depth=1'
2. 上記 1 の応答が得られる
今回取り出したい値(下記🛑) が存在している.
{
"_class": "hudson.model.FreeStyleBuild",
"actions": [
{
"_class": "hudson.model.ParametersAction",
"parameters": [
{
"_class": "hudson.model.FileParameterValue",
"name": "UPLOAD_FILE"
},
{
"_class": "hudson.model.StringParameterValue",
"name": "FILEPATH",
🛑 "value": "/fileserver/dir/a.txt"
}
]
},
{
"_class": "hudson.model.CauseAction",
"causes": [
{
"_class": "hudson.model.Cause$UserIdCause",
"shortDescription": "Started by user robozushi10",
"userId": "robozushi10",
"userName": "robozushi10"
}
]
},
略
3. JSON を解析して値を取り出す
苦行だが、本例の場合に jq コマンドで取り出すと次のようになる.
(Python や Ruby といった 高級言語で取り出す方が楽だと思う)
$ curl -X GET --user 'ユーザ名:APIキー' \
'http://IP:PORT/job/ジョブ名/ジョブ番号/api/json?build&depth=1' | \
jq -r '.actions[] | select( ._class == "hudson.model.ParametersAction" ) | \
.parameters[] | select( .name == "FILEPATH" ) | .value'
以上