You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy获取Jenkins Pipeline SCM(Git)配置的正确仓库URL方案

为什么getUserRemoteConfigs()返回错误值

绝大多数网上可查的获取Jenkins作业Git地址的Groovy脚本,都是针对自由风格项目编写的,这类作业的SCM配置直接挂载在作业根节点下。但选择「Pipeline script from SCM」定义方式的Pipeline作业,Git仓库配置存储在Pipeline定义的子节点中,直接调用作业根节点的SCM相关方法,拿到的是作业其他模块(比如SCM轮询触发器、历史残留配置)的参数,自然和GUI中Pipeline Definition板块展示的配置不匹配。

正确实现代码

以下脚本可直接在Jenkins Script Console中运行,会遍历所有层级文件夹下、以Git作为SCM源的Pipeline from SCM作业,输出作业名、对应仓库地址、分支规则、Jenkinsfile路径:

import jenkins.model.Jenkins
import org.jenkinsci.plugins.workflow.job.WorkflowJob

Jenkins.instance.getAllItems(WorkflowJob.class).each { job ->
    def flowDefinition = job.getDefinition()
    // 过滤非SCM来源的Pipeline作业
    if (flowDefinition.class.simpleName != 'CpsScmFlowDefinition') {
        return
    }
    def scm = flowDefinition.getScm()
    // 过滤非Git类型的SCM配置
    if (scm.class.simpleName != 'GitSCM') {
        return
    }
    // 读取配置值
    def remoteConfigs = scm.getUserRemoteConfigs()
    if (remoteConfigs.isEmpty()) {
        return
    }
    def repoUrl = remoteConfigs[0].getUrl()
    def branch = scm.getBranches().isEmpty() ? "未配置分支" : scm.getBranches()[0].getName()
    def jenkinsfilePath = flowDefinition.getScriptPath()
    
    println "作业全路径: ${job.fullName}"
    println "Git仓库URL: ${repoUrl}"
    println "拉取分支规则: ${branch}"
    println "Jenkinsfile相对路径: ${jenkinsfilePath}"
    println "----------------------------------------"
}
return "所有匹配作业遍历完成"
补充说明
  • 脚本会自动递归遍历Jenkins文件夹、视图下嵌套存储的所有Pipeline作业,无需额外编写路径遍历逻辑
  • 若作业配置了多个Git远程仓库,可遍历remoteConfigs列表输出所有仓库地址,无需固定取第一个配置
  • 若执行后仍有作业返回值和GUI展示不一致,优先排查是否安装了配置动态修改插件、是否通过JCasC配置了值覆盖,或者作业存在未保存的配置草稿
  • 执行脚本需要Jenkins管理员权限,Script Console运行的Groovy脚本拥有最高操作权限,执行前请确认脚本逻辑无风险

内容的提问来源于stack exchange,提问作者John W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:36:17