我的项目在许多其他项目中都有许多公共变量,因此我使用Jenkins共享库并创建了一个vars/buildMeta.groovy
文件,在其中定义了变量(一些sh
解析函数),并在环境阶段(var1,var2):
pipeline {
environment {
// initialize common vars
var1 = buildMeta.getVar1()
var2 = buildMeta.getVar2()
varA = var1 + "some_string"
varB = var2 + "some_other_string"
} // environment
stages {
stage('Some Stage') {
// ...
}
}
post {
always {
script {
// Print environment variables
sh "env"
} // script
} // always
} // post
} // pipeline
我决定将varA
,varB
导出到共享的vars/my_vars.groovy
并从那里使用它们(当我必须使用var1
,{ {1}}变量)。
var2
问题是,为了将那些var声明为我使用过的环境var:
class my_vars {
static Map varMap = [:]
static def loadVars (Map config) {
varMap.varA = config.var1 + "some_string"
varMap.varB = config.var2 + "some_other_string"
// Many more variables ...
return varMap
}
}
但是那样还没有定义buildMeta变量(var1,var2),所以我无法正确初始化pipeline {
my_vars.loadVars().each { key, value ->
env[key] = value
}
environment {
// initialize common vars
var1 = buildMeta.getVar1()
var2 = buildMeta.getVar2()
} // environment
stages {
stage('Some Stage') {
// ...
}
}
// ...
} // pipeline
调用。
另一方面,我不能将my_vars.loadVars()
函数复制到buildMeta.groovy
,因为前者有my_vars.loadVars()
的用法,而后者的调用未在一个阶段中定义(脚本)。
我可以通过将所有这些函数调用放在单独的阶段(让我们说“加载变量”阶段)来解决所有这些问题,但是我真的想避免该假的阶段。 最佳做法是什么?
谢谢!