Overview
curl で Jenkins の Web API を叩きたかったのですが、なかなか自分が欲しい情報が集まりませんでした...。
他にも困っている人がいるかなと思ったのでまとめておきます。
各 Node 情報を取得
curl -s -u user:passward http://jenkins.co.jp:8080/computer/api/json
取得したレスポンスをパイプして jq
とかで成形すればいい感じ。
Job を実行
curl -X POST -u user:{$apiToken} http://jenkins.co.jp:8080/job/{$projectName}/build
API トークンは、http://jenkins.co.jp:8080/user/${username}/configure
から取得できます。
パラメータ付きで実行する場合はこんな感じ。
curl -X POST -u user:{$apiToken} http://jenkins.co.jp:8080/job/{$projectName}/buildWithParameters?{$key}={$val}
Project / Job を削除
curl -X POST -u user:{$apiToken} http://jenkins.co.jp:8080/job/{$projectName}/doDelete
curl -X POST -u user:{$apiToken} http://jenkins.co.jp:8080/job/{$projectName}/{$jobNumber}/doDelete
Delete だけどなぜか POST 使います。
成功すると、200
ではなく 302 Found
返します。
Jenkins-crumb を取得
curl -s -u user:passward http://jenkins.co.jp:8080/crumbIssuer/api/xml
Jenkins に post する際に、Jenkins-crumb
を要求されるケースがあります。
xpath
使うといい感じで取り出せます。
crum=curl -s -u user:passward http://jenkins.co.jp:8080/crumbIssuer/api/xml | xpath "concat(//crumbRequestField, ': ', //crumb)" 2>/dev/null
echo $crum
> Jenkins-Crumb: xxxxxxxxxxx
Node の online / offline を切り替える
curl -s -u user:passward http://jenkins.co.jp:8080/computer/{$node}/toggleOffline -d "offlineMessage=temporary" -d $crum
$crumb
は上で取得した Jenkins-crumb
をセットしましょう。
Groovy Script を Jenkins で実行させる
script="for(j in jenkins.model.Jenkins.theInstance.getAllItems()) {
j.delete()
}"
curl -s -u user:passward -H $crumb -d "script=$script" http://jenkins.co.jp:8080/script
Web 上だとスクリプトコンソールで実行できるやつです。
その他
http://jenkins.co.jp:8080/computer/{$node}/configSubmit
でラベル情報とか更新できそうな気配なのですがなかなか難しい...
他にも使えそうな API あったら追記します。