概要
久しぶりに Jenkins のリモート API に触れたので使い方などをまとめておきます
環境
- macOS X 10.12.6
- Jenkins 2.60.3
事前作業
今回は docker 上で動かしました
Jenkins を動かすのはどこでも問題ないです
一番初めのテンポラリーパスワードによる認証とプラグインのインストール、ユーザの作成までは済ませておいてください
今回は root という名前のユーザを作成した体で勧めます
CSRF の無効化
Jenkins -> Jenkins の管理 -> グローバルセキュリティ設定 -> CSRF対策
のチェックをオフにして Apply
API トークンの取得
root -> 設定 -> API トークン -> API トークンの表示
ジョブの作成
適当に作成してください
API でも良いですが面倒なので手動で作成しました
ちなみに API で作成した場合は謎の XML ファイルを作成して FORM として POST すれば作成できます -> 参考
いろいろコールしてみる
つらつらと curl でコールしてみました
ちなみに全部 POST で送っていますが GET でも OK です
ジョブの一覧の取得
curl -X POST --user 'root:bcc000720152bfd435e5c5128705908a' \
'http://localhost:8080/api/json?tree=jobs'
ちなみに件数を指定して取得することもできます
curl --user 'root:bcc000720152bfd435e5c5128705908a' \
'http://localhost:8080/api/json?tree=jobs%5Bname%5D%7B0%2C1%7D'
URL にするとこんなフォーマットです
curl でコールするときは URL エンコードする必要があるので上記のようになっています
http://localhost:8080/api/json?tree=jobs[name]{0,1}
ジョブのビルド
curl -v -X POST --user 'root:bcc000720152bfd435e5c5128705908a' \
'http://localhost:8080/job/test/build'
ここでポイントですがレスポンスの Location ヘッダにキューの情報が付与されています
ここに番号が振られておりそれがビルドの番号にもなるので、実行したビルドの結果を追いたい場合には Location ヘッダの情報を使用してください
Location: http://localhost:8080/queue/item/3/
最後に成功したビルドの結果を取得
curl -X POST --user 'root:bcc000720152bfd435e5c5128705908a' \
'http://localhost:8080/job/test/lastSuccessfulBuild/api/json?pretty=true'
最後に成功したビルドのコンソール結果を取得
curl -X POST --user 'root:bcc000720152bfd435e5c5128705908a' \
'http://localhost:8080/job/test/lastSuccessfulBuild/logText/progressiveText?start=0'
ビルド番号を指定してビルドの結果を取得
curl -X POST --user 'root:bcc000720152bfd435e5c5128705908a' \
'http://localhost:8080/job/test/3/api/json?pretty=true'
ビルド番号を指定してビルドのコンソール結果を取得
curl -X POST --user 'root:bcc000720152bfd435e5c5128705908a' \
'http://localhost:8080/job/test/3/logText/progressiveText?start=0'
ビルド番号を指定してビルドのコンソール結果を HTML で取得
curl -X POST --user 'root:bcc000720152bfd435e5c5128705908a' \
'http://localhost:8080/job/test/3/logText/progressiveHtml?start=0'
Tips
トークンを使わないでも API をコールすることができます
トークンの箇所に作成したユーザのパスワードを入力しても API をコールすることができます
また、良くないですがそもそも認証情報付与するの面倒くさいという場合はグローバルセキュリティ設定から「セキュリティを有効化」のチェックをオフにすればトークンもパスワードもなしで API をコールできます
最後に
Jenkins のリモート API を試してみました
基本は UI で操作していて、その操作を API として使いたいときに URL の最後に /api
を付け加えてやるとその操作の API リファレンスがいろいろと表示されるのでそこでやり方を確認するといいと思います
コンソールの結果が平文 or HTML じゃなくてそれっぽい JSON とかに置き換えできれば Jenkins を使って簡単な API サーバが作れそうな気がしました
プラグインとか探せばあるのかな、、、
0 件のコメント:
コメントを投稿