JenkinsのAPIを使ってジョブ設定をインポートすることができたのでそのメモです。
異なる環境に設定を移行したい場合などに使えそうです。
※ Jenkins 2.52 で動作しました。
移行元のジョブの設定をXMLで取得する
- (移行元ジョブのURL)/config.xml にGETリクエストすると取得できます。
移行先Jenkinsの"crumb"を取得する
- JenkinsにPOSTリクエストをするための情報(=crumb)を取得します。
- CSRF対策としてcrumbを付加する必要があるようになっているようです。
- これがないと
No valid crumb was included in the request
というエラーが返ります。
- (ユーザー名):(パスワード)@(JenkinsHost)/crumbIssuer/api/xml にGETリクエストすると以下のようなレスポンスが得られます。
<defaultCrumbIssuer_class="hudson.security.csrf.DefaultCrumbIssuer">
<crumb>1111222233334444</crumb>
<crumbRequestField>Jenkins-Crumb</crumbRequestField>
</defaultCrumbIssuer>
移行先Jenkinsに空のジョブを作成する
- インポートさせるジョブを作ります。
移行先ジョブに設定をインポートする
- (移行先ジョブのURL)/config.xml にPOSTリクエストします。
- リクエストヘッダに先ほど取得したcrumbをセットします。
- 先ほどの例だと
Jenkins-Crumb: 1111222233334444
となります。
- 先ほどの例だと
- リクエストボディは移行元のジョブから取得したXMLです。
- POSTリクエストが成功すると、XMLの内容がジョブの設定に反映されます。