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)
问题分析与修复
错误原因
- 环境变量操作错误:直接将
env重新赋值为普通列表,覆盖了Jenkins原生的EnvVars对象,而EnvVars不支持add方法,必须用标准方式赋值。 - 变量引用错误:
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
相关产品推荐
相关产品推荐

