jenkins - 获取其他工作的构建 git commit
问题描述
如何使用管道从另一个作业中获取其他作业构建的 git commit 哈希?我正在寻找类似的东西:
Jenkins.instance.getAllItems(hudson.model.Job)
.filter { it.fullName.equals(params.theOtherJobNameSpecifiedViaParamByTheUser)[0]
.getBuild(params.buildNoSpecifiedViaParamByTheUser)
.getGitCommitHashOfTheSelectedBuild()
解决方案
您可以通过 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。
推荐阅读
- node.js - 导出要从其他类 NodeJ 扩展的类的正确方法是什么?
- python - 如何使用 mongoengine 只打开一个与 mongodb 的连接?
- python - Django Stripe Payment:无效的卡对象:必须是字典或非空字符串
- python - 查看是否在 df2['Description'] 的任何位置找到 df1[Keyword'] 中的字符串列表,如果 df2 没有匹配则删除行
- json - 在 Swagger UI 中美化 Json 响应
- sql - 在 Oracle 数据库中更改用户配置文件
- python - 绘制每日级别数据,但仅使用月级别标签
- python - Selenium 在按钮单击后不显示表格内容
- excel - Excel 中的 TODAY 函数,自动更新
- sql - SQL转换:多行到一行