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

Groovy共享库中添加环境变量后无法访问,求助排查

问题:Jenkins共享库中无法正确设置环境变量并访问

希望将Jenkinsfile传入的remoteUrl变量捕获到Groovy共享库中,存入环境变量env供后续访问,但尝试后失败。以下是相关代码及报错:

Groovy共享库代码

def call(Map config) {
    for (param in ['credentialsId', 'remoteUrl']) {
        if (!config[param]) {
            error "checkoutGit(): missing parameter ${param}"
        }
    }
    env = ["REMOTE_URL=${config.remoteUrl}"]
    final GIT_YX_URL = "ssh://@git-YX"
    final LIB_GIT_YX_MIRROR_URL = "git://git-mirror:111/git-t"
    if (config.remoteUrl) {
        println "Git YX url passed in user job"
        env.add("GIT_YX_MIRROR_URL=${config.remoteUrl}")
        echo "GIT_YX_MIRROR_URL is: ${GIT_YX_MIRROR_URL}"
    } else {
        println "No Git YX url passed in user job, using Library defined Git Mirror URL"
        env.add("GIT_YX_MIRROR_URL=$LIB_GIT_YX_MIRROR_URL")
    }
}

Jenkinsfile代码

def REPO_MIRROR_URL = 'git://git-mirror'
steps {
    container('main') {
        script {
            checkoutUtil(
                credentialsId: 'git-ssh',
                remoteUrl: "$REPO_MIRROR_URL",
            )
        }
    }
}

报错信息

Git YX url passed in user job

Also:   org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: 01e941fa-4301-4ccc-a4ac-f286eb1e7baa
hudson.remoting.ProxyException: groovy.lang.MissingPropertyException: No such property: GIT_YX_MIRROR_URL for class: checkoutUtil
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:66)

问题分析与修复

错误原因

  1. 环境变量操作错误:直接将env重新赋值为普通列表,覆盖了Jenkins原生的EnvVars对象,而EnvVars不支持add方法,必须用标准方式赋值。
  2. 变量引用错误:echo中直接写${GIT_YX_MIRROR_URL},但该变量并未在共享库中定义,环境变量必须通过env.变量名访问。

修正后的共享库代码

def call(Map config) {
    // 校验必填参数
    for (param in ['credentialsId', 'remoteUrl']) {
        if (!config[param]) {
            error "checkoutGit(): missing parameter ${param}"
        }
    }

    // 用Jenkins标准方式设置环境变量
    env.REMOTE_URL = config.remoteUrl
    final LIB_GIT_YX_MIRROR_URL = "git://git-mirror:111/git-t"

    if (config.remoteUrl) {
        println "Git YX url passed in user job"
        env.GIT_YX_MIRROR_URL = config.remoteUrl
        echo "GIT_YX_MIRROR_URL is: ${env.GIT_YX_MIRROR_URL}"
    } else {
        println "No Git YX url passed in user job, using Library defined Git Mirror URL"
        env.GIT_YX_MIRROR_URL = LIB_GIT_YX_MIRROR_URL
    }
}

关键修正点

  • 不要重新赋值env对象,直接通过env.变量名 = 值的方式设置环境变量,这是Jenkins操作环境变量的标准方法。
  • 访问环境变量必须使用env.变量名,共享库上下文不会自动将环境变量映射为本地变量。
  • 移除了未使用的GIT_YX_URL变量,精简代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:06:12