LoginSignup
17
11

More than 3 years have passed since last update.

Jenkins Web API まとめ

Last updated at Posted at 2019-10-02

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 あったら追記します。

17
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
11