【Jenkins】Pipeline REST API でステージ情報を取得する

CI/CD

はじめに

こんにちは株式会社TIELECのタカシユウトです。この記事ではJenkinsのPipeline REST APIについて紹介します。Pipeline REST APIを使うことで、パイプラインのステージやビルド情報を詳細に取得できます。

Pipeline REST API

https://github.com/jenkinsci/pipeline-stage-view-plugin/tree/master/rest-api

パイプラインジョブの情報を取得することができるAPIです。

パイプラインジョブのURLの後ろに/wfapi をつけると色々情報が取ます。

ジョブの情報取得

Remote access APIと同じように 03_write_fileのジョブの情報をみてみます。 http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/wfapi/

{ 
   "_links":{ 
      "self":{ 
         "href":"/job/decrative-pipeline/job/03_write_file/wfapi/describe"
      },
      "runs":{ 
         "href":"/job/decrative-pipeline/job/03_write_file/wfapi/runs"
      }
   },
   "name":"03_write_file",
   "runCount":5
}

エンドポイントのパスが出てきました。

wfapi/runs を見てみます。

http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/wfapi/runs

Jsonをクリックで展開します

[
   { 
      "_links":{ 
         "self":{ 
            "href":"/job/decrative-pipeline/job/03_write_file/17/wfapi/describe"
         },
         "changesets":{ 
            "href":"/job/decrative-pipeline/job/03_write_file/17/wfapi/changesets"
         }
      },
      "id":"17",
      "name":"#17",
      "status":"SUCCESS",
      "startTimeMillis":1567136586348,
      "endTimeMillis":1567136633687,
      "durationMillis":47339,
      "queueDurationMillis":11,
      "pauseDurationMillis":0,
      "stages":[ 
         { 
            "_links":{ 
               "self":{ 
                  "href":"/job/decrative-pipeline/job/03_write_file/17/execution/node/6/wfapi/describe"
               }
            },
            "id":"6",
            "name":"Declarative: Checkout SCM",
            "execNode":"",
            "status":"SUCCESS",
            "startTimeMillis":1567136630725,
            "durationMillis":2430,
            "pauseDurationMillis":0
         },
         { 
            "_links":{ 
               "self":{ 
                  "href":"/job/decrative-pipeline/job/03_write_file/17/execution/node/13/wfapi/describe"
               }
            },
            "id":"13",
            "name":"write file",
            "execNode":"",
            "status":"SUCCESS",
            "startTimeMillis":1567136633197,
            "durationMillis":469,
            "pauseDurationMillis":0
         }
      ]
   },
   { 
      "_links":{ 
         "self":{ 
            "href":"/job/decrative-pipeline/job/03_write_file/16/wfapi/describe"
         }
      },
      "id":"16",
      "name":"#16",
      "status":"SUCCESS",
      "startTimeMillis":1557466865325,
      "endTimeMillis":1557466871660,
      "durationMillis":6335,
      "queueDurationMillis":20,
      "pauseDurationMillis":0,
      "stages":[ 
         { 
            "_links":{ 
               "self":{ 
                  "href":"/job/decrative-pipeline/job/03_write_file/16/execution/node/6/wfapi/describe"
               }
            },
            "id":"6",
            "name":"Declarative: Checkout SCM",
            "execNode":"",
            "status":"SUCCESS",
            "startTimeMillis":1557466869947,
            "durationMillis":1655,
            "pauseDurationMillis":0
         },
         { 
            "_links":{ 
               "self":{ 
                  "href":"/job/decrative-pipeline/job/03_write_file/16/execution/node/13/wfapi/describe"
               }
            },
            "id":"13",
            "name":"write file",
            "execNode":"",
            "status":"SUCCESS",
            "startTimeMillis":1557466871618,
            "durationMillis":15,
            "pauseDurationMillis":0
         }
      ]
   },
   { 
      "_links":{ 
         "self":{ 
            "href":"/job/decrative-pipeline/job/03_write_file/15/wfapi/describe"
         }
      },
      "id":"15",
      "name":"#15",
      "status":"SUCCESS",
      "startTimeMillis":1554442450777,
      "endTimeMillis":1554442452894,
      "durationMillis":2117,
      "queueDurationMillis":6,
      "pauseDurationMillis":0,
      "stages":[ 
         { 
            "_links":{ 
               "self":{ 
                  "href":"/job/decrative-pipeline/job/03_write_file/15/execution/node/6/wfapi/describe"
               }
            },
            "id":"6",
            "name":"Declarative: Checkout SCM",
            "execNode":"",
            "status":"SUCCESS",
            "startTimeMillis":1554442451871,
            "durationMillis":868,
            "pauseDurationMillis":0
         },
         { 
            "_links":{ 
               "self":{ 
                  "href":"/job/decrative-pipeline/job/03_write_file/15/execution/node/13/wfapi/describe"
               }
            },
            "id":"13",
            "name":"write file",
            "execNode":"",
            "status":"SUCCESS",
            "startTimeMillis":1554442452776,
            "durationMillis":71,
            "pauseDurationMillis":0
         }
      ]
   },
   { 
      "_links":{ 
         "self":{ 
            "href":"/job/decrative-pipeline/job/03_write_file/14/wfapi/describe"
         }
      },
      "id":"14",
      "name":"#14",
      "status":"SUCCESS",
      "startTimeMillis":1554442389169,
      "endTimeMillis":1554442395175,
      "durationMillis":6006,
      "queueDurationMillis":2,
      "pauseDurationMillis":0,
      "stages":[ 
         { 
            "_links":{ 
               "self":{ 
                  "href":"/job/decrative-pipeline/job/03_write_file/14/execution/node/6/wfapi/describe"
               }
            },
            "id":"6",
            "name":"Declarative: Checkout SCM",
            "execNode":"",
            "status":"SUCCESS",
            "startTimeMillis":1554442393462,
            "durationMillis":1671,
            "pauseDurationMillis":0
         },
         { 
            "_links":{ 
               "self":{ 
                  "href":"/job/decrative-pipeline/job/03_write_file/14/execution/node/13/wfapi/describe"
               }
            },
            "id":"13",
            "name":"write file",
            "execNode":"",
            "status":"SUCCESS",
            "startTimeMillis":1554442395143,
            "durationMillis":13,
            "pauseDurationMillis":0
         }
      ]
   },
   { 
      "_links":{ 
         "self":{ 
            "href":"/job/decrative-pipeline/job/03_write_file/13/wfapi/describe"
         }
      },
      "id":"13",
      "name":"#13",
      "status":"SUCCESS",
      "startTimeMillis":1552486452530,
      "endTimeMillis":1552486458565,
      "durationMillis":6035,
      "queueDurationMillis":4,
      "pauseDurationMillis":0,
      "stages":[ 
         { 
            "_links":{ 
               "self":{ 
                  "href":"/job/decrative-pipeline/job/03_write_file/13/execution/node/6/wfapi/describe"
               }
            },
            "id":"6",
            "name":"Declarative: Checkout SCM",
            "execNode":"",
            "status":"SUCCESS",
            "startTimeMillis":1552486456845,
            "durationMillis":1662,
            "pauseDurationMillis":0
         },
         { 
            "_links":{ 
               "self":{ 
                  "href":"/job/decrative-pipeline/job/03_write_file/13/execution/node/13/wfapi/describe"
               }
            },
            "id":"13",
            "name":"write file",
            "execNode":"",
            "status":"SUCCESS",
            "startTimeMillis":1552486458519,
            "durationMillis":23,
            "pauseDurationMillis":0
         }
      ]
   }
]

ビルドの履歴と、実行結果、ジョブの開始時間、実行時間といった情報が取れています。 Remote Access APIよりも情報量がしっかりしていて、なおかつ見やすい作りになっているようです。

ビルド結果の情報

最新のビルド結果の情報を確認してみます。

http://jenkins.tielec.blog:8080//job/decrative-pipeline/job/03_write_file/17/wfapi/describe

Jsonをクリックで展開します

{ 
   "_links":{ 
      "self":{ 
         "href":"/job/decrative-pipeline/job/03_write_file/17/wfapi/describe"
      },
      "changesets":{ 
         "href":"/job/decrative-pipeline/job/03_write_file/17/wfapi/changesets"
      }
   },
   "id":"17",
   "name":"#17",
   "status":"SUCCESS",
   "startTimeMillis":1567136586348,
   "endTimeMillis":1567136633687,
   "durationMillis":47339,
   "queueDurationMillis":11,
   "pauseDurationMillis":0,
   "stages":[ 
      { 
         "_links":{ 
            "self":{ 
               "href":"/job/decrative-pipeline/job/03_write_file/17/execution/node/6/wfapi/describe"
            }
         },
         "id":"6",
         "name":"Declarative: Checkout SCM",
         "execNode":"",
         "status":"SUCCESS",
         "startTimeMillis":1567136630725,
         "durationMillis":2430,
         "pauseDurationMillis":0
      },
      { 
         "_links":{ 
            "self":{ 
               "href":"/job/decrative-pipeline/job/03_write_file/17/execution/node/13/wfapi/describe"
            }
         },
         "id":"13",
         "name":"write file",
         "execNode":"",
         "status":"SUCCESS",
         "startTimeMillis":1567136633197,
         "durationMillis":469,
         "pauseDurationMillis":0
      }
   ]
}

ステージごとの情報が取得できていることがわかります。 ステージの名前や、ステージの成功失敗、ステージの開始時間や実行時間といった情報が取れています。

changesets のエンドポイントも見てみます。 http://jenkins.tielec.blog:8080//job/decrative-pipeline/job/03_write_file/17/wfapi/changesets

[ 
   { 
      "kind":"git",
      "commitCount":1,
      "commits":[ 
         { 
            "commitId":"2ae5f87662481e3cedaf98b9b6faa64e4e8e0a7f",
            "commitUrl":"https://github.com/sakamaki-y123/jenkins-continuous-delivery/commit/2ae5f87662481e3cedaf98b9b6faa64e4e8e0a7f",
            "authorJenkinsId":"noreply",
            "message":"Update pipeline_19_random_kitten_generator.groovy",
            "timestamp":1565431885000,
            "consoleUrl":"/job/decrative-pipeline/job/03_write_file/17/changes#2ae5f87662481e3cedaf98b9b6faa64e4e8e0a7f"
         }
      ],
      "consoleUrl":"/job/decrative-pipeline/job/03_write_file/17/changes"
   }
]

Gitのどのリビジョンで実行されたものかがわかるようになっています。

他にも、artifactspendingInputActionsといったエンドポイントもあり、アーカイブされたファイルの情報を取得したりすることや、ユーザーの入力を求める際の情報などの情報が取得できるみたいです。

まとめ

この記事では、JenkinsのAPIを使ってジョブの情報を取得する方法について紹介しました。APIを活用することで、Jenkinsの情報をプログラムから取得したり、自動化を進めることができます。

おすすめ書籍

[

[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

[

Jenkins

[

サーバ/インフラエンジニアの基本がこれ1冊でしっかり身につく本

コメント

タイトルとURLをコピーしました