一覧に戻る
    【Jenkins】Remote access API でジョブ情報を取得する
    CI/CD
    PRこの記事には広告が含まれています

    【Jenkins】Remote access API でジョブ情報を取得する

    (更新日: 2025/11/6)
    47 分で読める

    はじめに

    こんにちは株式会社TIELECのタカシユウトです。この記事ではJenkinsのRemote access APIについて紹介します。Remote access APIを使うことで、ジョブやビルドの情報をプログラムから取得できます。

    Remote access API

    https://wiki.jenkins.io/display/JA/Remote+access+API

    もっとも初期からあると思われるAPIです。

    具体的には次のようなことができます。

    1. プログラムでJenkinsから情報を取得する
    2. 新しいビルドを起動する
    3. ジョブの作成、コピー といったことができます。

    使い方としてはURLの後ろに /api/json とつければ 色々情報が取れますというもの。

    フォルダの情報取得

    以下のページからdecrative-pipelineという名称のフォルダより情報を取得してみます。 http://jenkins.tielec.blog:8080/job/decrative-pipeline/

    APIで情報を取得します。 http://jenkins.tielec.blog:8080/job/decrative-pipeline/api/json

    見やすいように整形したものがこちらです。

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

    { 
       "_class":"com.cloudbees.hudson.plugins.folder.Folder",
       "actions":[ 
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
             "_class":"com.cloudbees.plugins.credentials.ViewCredentialsAction"
          }
       ],
       "description":"repository: https://github.com/sakamaki-y123/jenkins-continuous-delivery",
       "displayName":"decrative-pipeline",
       "displayNameOrNull":null,
       "fullDisplayName":"decrative-pipeline",
       "fullName":"decrative-pipeline",
       "name":"decrative-pipeline",
       "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/",
       "healthReport":[ 
          { 
             "description":"Worst health: decrative-pipeline » 07_read_json: Build stability: 3 out of the last 5 builds failed.",
             "iconClassName":"icon-health-20to39",
             "iconUrl":"health-20to39.png",
             "score":40
          }
       ],
       "jobs":[ 
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"01_hello_world",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/01_hello_world/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"02_use_sh_step",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/02_use_sh_step/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"03_write_file",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"04_archive_artifacts",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/04_archive_artifacts/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"05_clean_workspace",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/05_clean_workspace/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"06_copy_artifacts",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/06_copy_artifacts/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"07_read_json",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/07_read_json/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"08_parallel_step",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/08_parallel_step/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"09_agent_docker",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/09_agent_docker/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"10_use_multiple_docker",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/10_use_multiple_docker/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"11_read_and_write_yaml",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/11_read_and_write_yaml/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"12_input_request",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/12_input_request/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"13_conditional_run_stage",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/13_conditional_run_stage/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"14_run_ansible",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/14_run_ansible/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"15_use_shared_library",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/15_use_shared_library/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"16_use_global_variables",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/16_use_global_variables/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"17_nested_stage",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/17_nested_stage/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"18_matrix_build",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/18_matrix_build/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"19_random_kitten_generator",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/19_random_kitten_generator/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"20_search_youtube_video",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/20_search_youtube_video/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"21_amazon_translator",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/21_amazon_translator/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"22_download_hot_bokete_images",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/22_download_hot_bokete_images/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"23_download_random_kitten_images",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/23_download_random_kitten_images/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"24_download_beautiful_landscape-video",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/24_download_beautiful_landscape-video/",
             "color":"blue"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
             "name":"25_upload_artifact_to_dropbox",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/25_upload_artifact_to_dropbox/",
             "color":"blue"
          }
       ],
       "primaryView":{ 
          "_class":"hudson.model.AllView",
          "name":"all",
          "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/"
       },
       "views":[ 
          { 
             "_class":"hudson.model.AllView",
             "name":"all",
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/"
          }
       ]
    }

    フォルダ内にあるジョブのURLや名前などが確認できてきます。

    ジョブの情報取得

    続いて、03_write_file のジョブの情報を取得してみます。 http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/

    APIで情報を取得してみます。 http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/api/json

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

    { 
       "_class":"org.jenkinsci.plugins.workflow.job.WorkflowJob",
       "actions":[ 
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
             "_class":"com.cloudbees.plugins.credentials.ViewCredentialsAction"
          }
       ],
       "description":"03_write_file",
       "displayName":"03_write_file",
       "displayNameOrNull":null,
       "fullDisplayName":"decrative-pipeline » 03_write_file",
       "fullName":"decrative-pipeline/03_write_file",
       "name":"03_write_file",
       "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/",
       "buildable":true,
       "builds":[ 
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun",
             "number":17,
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/17/"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun",
             "number":16,
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/16/"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun",
             "number":15,
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/15/"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun",
             "number":14,
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/14/"
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun",
             "number":13,
             "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/13/"
          }
       ],
       "color":"blue",
       "firstBuild":{ 
          "_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun",
          "number":13,
          "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/13/"
       },
       "healthReport":[ 
          { 
             "description":"Build stability: No recent builds failed.",
             "iconClassName":"icon-health-80plus",
             "iconUrl":"health-80plus.png",
             "score":100
          }
       ],
       "inQueue":false,
       "keepDependencies":false,
       "lastBuild":{ 
          "_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun",
          "number":17,
          "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/17/"
       },
       "lastCompletedBuild":{ 
          "_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun",
          "number":17,
          "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/17/"
       },
       "lastFailedBuild":null,
       "lastStableBuild":{ 
          "_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun",
          "number":17,
          "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/17/"
       },
       "lastSuccessfulBuild":{ 
          "_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun",
          "number":17,
          "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/17/"
       },
       "lastUnstableBuild":null,
       "lastUnsuccessfulBuild":null,
       "nextBuildNumber":18,
       "property":[ 
          { 
             "_class":"hudson.model.ParametersDefinitionProperty",
             "parameterDefinitions":[ 
                { 
                   "_class":"hudson.model.TextParameterDefinition",
                   "defaultParameterValue":{ 
                      "_class":"hudson.model.StringParameterValue",
                      "name":"OUTPUT_TEXT",
                      "value":""
                   },
                   "description":"",
                   "name":"OUTPUT_TEXT",
                   "type":"TextParameterDefinition"
                }
             ]
          },
          { 
             "_class":"com.coravy.hudson.plugins.github.GithubProjectProperty"
          }
       ],
       "queueItem":null,
       "concurrentBuild":true,
       "resumeBlocked":false
    }

    ビルドの実行履歴などの情報が取得できています。

    ビルド結果の情報取得

    続いて最新の実行結果に関する情報を取得してみます。このときの最新のビルド番号は17でした。 http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/17/

    APIでの取得結果はこちら http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/17/api/json

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

    { 
       "_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun",
       "actions":[ 
          { 
             "_class":"hudson.model.CauseAction",
             "causes":[ 
                { 
                   "_class":"hudson.model.Cause$UpstreamCause",
                   "shortDescription":"Started by upstream project \"decrative-pipeline/08_parallel_step\" build number 9",
                   "upstreamBuild":9,
                   "upstreamProject":"decrative-pipeline/08_parallel_step",
                   "upstreamUrl":"job/decrative-pipeline/job/08_parallel_step/"
                }
             ]
          },
          { 
    
          },
          { 
             "_class":"hudson.model.ParametersAction",
             "parameters":[ 
                { 
                   "_class":"hudson.model.TextParameterValue",
                   "name":"OUTPUT_TEXT",
                   "value":"hoge hoge"
                }
             ]
          },
          { 
             "_class":"hudson.plugins.git.util.BuildData",
             "buildsByBranchName":{ 
                "refs/remotes/origin/master":{ 
                   "_class":"hudson.plugins.git.util.Build",
                   "buildNumber":17,
                   "buildResult":null,
                   "marked":{ 
                      "SHA1":"2ae5f87662481e3cedaf98b9b6faa64e4e8e0a7f",
                      "branch":[ 
                         { 
                            "SHA1":"2ae5f87662481e3cedaf98b9b6faa64e4e8e0a7f",
                            "name":"refs/remotes/origin/master"
                         }
                      ]
                   },
                   "revision":{ 
                      "SHA1":"2ae5f87662481e3cedaf98b9b6faa64e4e8e0a7f",
                      "branch":[ 
                         { 
                            "SHA1":"2ae5f87662481e3cedaf98b9b6faa64e4e8e0a7f",
                            "name":"refs/remotes/origin/master"
                         }
                      ]
                   }
                }
             },
             "lastBuiltRevision":{ 
                "SHA1":"2ae5f87662481e3cedaf98b9b6faa64e4e8e0a7f",
                "branch":[ 
                   { 
                      "SHA1":"2ae5f87662481e3cedaf98b9b6faa64e4e8e0a7f",
                      "name":"refs/remotes/origin/master"
                   }
                ]
             },
             "remoteUrls":[ 
                "https://github.com/sakamaki-y123/jenkins-continuous-delivery.git"
             ],
             "scmName":""
          },
          { 
             "_class":"hudson.plugins.git.GitTagAction"
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.cps.EnvActionImpl"
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
    
          },
          { 
             "_class":"org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction"
          },
          { 
    
          },
          { 
             "_class":"org.jenkinsci.plugins.workflow.job.views.FlowGraphAction"
          },
          { 
    
          },
          { 
    
          },
          { 
    
          }
       ],
       "artifacts":[ 
    
       ],
       "building":false,
       "description":null,
       "displayName":"#17",
       "duration":47339,
       "estimatedDuration":18597,
       "executor":null,
       "fullDisplayName":"decrative-pipeline » 03_write_file #17",
       "id":"17",
       "keepLog":false,
       "number":17,
       "queueId":84830,
       "result":"SUCCESS",
       "timestamp":1567136586337,
       "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/17/",
       "changeSets":[ 
          { 
             "_class":"hudson.plugins.git.GitChangeSetList",
             "items":[ 
                { 
                   "_class":"hudson.plugins.git.GitChangeSet",
                   "affectedPaths":[ 
                      "pipeline/decrative-pipeline/pipeline_19_random_kitten_generator.groovy"
                   ],
                   "commitId":"2ae5f87662481e3cedaf98b9b6faa64e4e8e0a7f",
                   "timestamp":1565431885000,
                   "author":{ 
                      "absoluteUrl":"http://jenkins.tielec.blog:8080/user/noreply",
                      "fullName":"noreply"
                   },
                   "authorEmail":"noreply@github.com",
                   "comment":"Update pipeline_19_random_kitten_generator.groovy\n",
                   "date":"2019-08-10 19:11:25 +0900",
                   "id":"2ae5f87662481e3cedaf98b9b6faa64e4e8e0a7f",
                   "msg":"Update pipeline_19_random_kitten_generator.groovy",
                   "paths":[ 
                      { 
                         "editType":"edit",
                         "file":"pipeline/decrative-pipeline/pipeline_19_random_kitten_generator.groovy"
                      }
                   ]
                }
             ],
             "kind":"git"
          }
       ],
       "culprits":[ 
          { 
             "absoluteUrl":"http://jenkins.tielec.blog:8080/user/noreply",
             "fullName":"noreply"
          }
       ],
       "nextBuild":null,
       "previousBuild":{ 
          "number":16,
          "url":"http://jenkins.tielec.blog:8080/job/decrative-pipeline/job/03_write_file/16/"
       }
    }

    ビルドの実行結果や、実行時間、上流のジョブなど、より詳細な情報を取得できています。

    まとめ

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

    おすすめ書籍

    もっと深く学びたい方へ

    この記事で、Remote APIを使った情報取得の方法は理解できたと思います。

    でも、「どの情報を外部システムに連携すべきか」「API経由の操作をどこまで許可するか」という判断は、セキュリティと利便性のバランスを考える必要があります。

    より深い理解のために、こちらの記事もおすすめです:

    SREの仕事 ― 問題発見から恒久対応、そして結果観察まで

    SREの仕事 ― 問題発見から恒久対応、そして結果観察まで

    Tech
    SRE
    AI駆動開発の最適な検証サイクルを考える──人間とAI、それぞれの「テストのタイミング」

    AI駆動開発の最適な検証サイクルを考える──人間とAI、それぞれの「テストのタイミング」

    Tech
    AI開発

    この記事は役に立ちましたか?

    Coffee cup

    この記事が、何かの整理につながったら

    コーヒー1杯分の応援をもらえると嬉しいです。

    ※ これは応援とは別の話ですが、

    同じようなテーマを自分の文脈で整理したい場合は、 (文章だけだと詰まりやすい人向けに) 思考整理の壁打ちという形で対話の時間も取っています。

    対話の時間について