获取其他作业的构建 git 提交



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

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

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

首先获取您需要的网址:

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

然后解析输出。 我倾向于使用 XPATH 作为 xml,也使用 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。

可以将带有提交哈希的生成说明添加到生成中,然后在其他生成中检索该说明。

stage('Set commit id as a build description') {
currentBuild.setDescription(sh(script: 'git rev-parse HEAD').trim())
}

然后,您可以执行以下操作:

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

这不是你想要的,但我认为,这是实现你想要的最方便的方法。

最新更新