groovy - groovy 列出具有作业中使用的 GIT URL 的 Jenkins 作业
问题描述
我们需要打印这些作业中配置的 Jenkins 作业 URL 和 GIT URL。
例如:
假设我的 Jenkins URL 是:http://localhost:8080并且我的 git URL 是 ssh://git:424
如果我从 Jenkins 运行 groovy 代码,它应该返回:
http://localhost:8080/job_name1 | ssh://git:424/repo_name1(在job_name1的SCM部分配置的GIT URL)
http://localhost:8080/job_name2 | ssh://git:424/repo_name2(在job_name2的SCM部分配置的GIT URL)
我有以下代码列出工作:
Jenkins.instance.getAllItems(AbstractProject.class).each {it ->
println it.fullName;
}
以下代码列出 SCM 值:
Jenkins.instance.getAllItems(hudson.model.AbstractProject.class).each {it ->
scm = it.getScm()
if(scm instanceof hudson.plugins.git.GitSCM)
{
println scm.getUserRemoteConfigs()[0].getUrl()
}
}
println "Done"
上面的代码首先返回 Jenkins 工作 URLS,然后返回 SCM URl,但我必须手动映射 SCM 属于什么 Jenkins 工作 URL。
有没有办法,我可以使用 groovy 打印 Jenkins 作业 URL 及其 SCM 值。
感谢帮助!
解决方案
这适用于经典作业和工作流作业:
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
def printScm(project, scm){
if (scm instanceof hudson.plugins.git.GitSCM) {
scm.getRepositories().each {
it.getURIs().each {
println(project + "\t"+ it.toString());
}
}
}
}
Jenkins.instance.getAllItems(Job.class).each {
project = it.getFullName()
if (it instanceof AbstractProject){
printScm(project, it.getScm())
} else if (it instanceof WorkflowJob) {
it.getSCMs().each {
printScm(project, it)
}
} else {
println("project type unknown: " + it)
}
}
推荐阅读
- excel - 使用datagridview将数据从excel导入datagridview已经在vb.net中有列
- xamarin.forms - 在 Xamarin.Forms 中找不到与给定名称“Theme.AppCompat.Light.Dialog”匹配的资源
- python - 带有 Tensorflow 的 Keras:根据需要使用内存 [ResourceExhaustedError]
- asp.net-web-api - 在某些部署到 Azure 应用服务后,在 Web API 中随机出现“System.BadImageFormatException:未找到索引”错误
- string - 在 tableview 单元格中获取 coredata (swift4)
- elasticsearch - elasticsearch 如何处理脚本更新查询中的返回?
- clojure - Clojure/FP:将函数应用于运算符的每个参数
- c - 大型、基于状态的 arduino 项目的最佳编码实践。
- javascript - 一键提交多个表单
- php - 如何设置适用于开发服务器和生产服务器的文件上传路径