团队,我想捕获来自 jenkinsfile 的 var
remoteUrl
值到从 jenkinsfile 传递的 groovy 库中,并将其存储在 env var 中以便稍后访问。但我似乎做不到。有什么提示我错过了什么吗?
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")
}
我的詹金斯文件是
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)
您当前的问题是这一行:
echo "GIT_YX_MIRROR_URL is: ${GIT_YX_MIRROR_URL}"
变量 GIT_YX_MIRROR_URL 未在任何地方定义。
接下来,像这样重新定义 `env 是不好的:
env = ["REMOTE_URL=${config.remoteUrl}"]
Jenkins 已使用 env
来存储当前环境。将其重新用于全局范围的变量是令人困惑的。
最后,Jenkins 共享库应该是无状态的。不要在调用之间保存变量。在某些时候有人必须阅读您的代码。善待他们。