首页 > 解决方案 > 获取其他工作的构建 git commit

问题描述

如何使用管道从另一个作业中获取其他作业构建的 git commit 哈希?我正在寻找类似的东西:

Jenkins.instance.getAllItems(hudson.model.Job)
     .filter { it.fullName.equals(params.theOtherJobNameSpecifiedViaParamByTheUser)[0]
     .getBuild(params.buildNoSpecifiedViaParamByTheUser)
     .getGitCommitHashOfTheSelectedBuild()

标签: jenkinsjenkins-pipeline

解决方案


您可以通过 XML 或 JSON 使用 Jenkins 的 API。

首先获取您需要的网址:

XML: https://JENKINS-HOST/jenkins/job/JOB-NAME/job/JOB-BRANCH/BUILD-NUMBER/api/xml

JSON: https://JENKINS-HOST/jenkins/job/JOB-NAME/job/JOB-BRANCH/BUILD-NUMBER/api/json

然后解析输出。我倾向于对 xml 使用 XPATH,也使用 shell。

def generate_xpath_url (URL, BRANCH) {
  branch = params.BRANCH_NAME
  jenkins_job_url = params.OTHER_JENKINS_JOB_URL
  remote_name = parse_git_remote_name(URL);
  url = other_jenkins_job_url + 'lastSuccessfulBuild/api/xml?xpath=//refsremotes' + remote_name + branch + '/marked/SHA1'
  return url
}

...

lastBuildCommitUrl = generate_xpath_url(env.GIT_URL, env.GIT_BRANCH)
lastBuildNumberUrl = env.JOB_URL + 'lastSuccessfulBuild/buildNumber'
withCredentials([[$class: 'UsernamePasswordMultiBinding',
    credentialsId: 'SomeJenkinsNonUser',
    usernameVariable: 'JENKINS_API_USER',
    passwordVariable: 'JENKINS_API_PSW']])
{
    lastBuildCommit = sh " curl -sLu ${JENKINS_API_USER}:${JENKINS_API_PSW} \"${lastBuildCommitUrl}\" | sed -e 's/<[^>]*>//g' """)
    lastBuildNumber = sh([script:"curl -sLu ${JENKINS_API_USER}:${JENKINS_API_PSW} \"${lastBuildNumberUrl}\"", returnStdout: true]).trim();
}

上面的代码假设您可以获得存储库的 git url、您关心的存储库的 git 分支、您想要的“其他 jenkins 作业”的作业 url,并且您有一个非用户 ID一个 api 令牌,您可以使用它从 jenkins 中访问 jenkins api。


推荐阅读