gpt4 book ai didi

jenkins - 如何在脚本化的 Jenkins 管道中动态设置环境变量?

转载 作者:行者123 更新时间:2023-12-04 15:25:12 42 4
gpt4 key购买 nike

我正在尝试在 jenkins 管道脚本中动态设置环境变量。

我正在使用 .groovy 和 .jenkinsfile 脚本的组合来为尽可能干燥的管道生成阶段{}定义。

我有以下方法:

def generateStage(nameOfTestSet, pathToTestSet, machineLabel, envVarName, envVarValue)
{
echo "Generating stage for ${nameOfTestSet} on ${machineLabel}"
return node("${machineLabel}") {
stage(nameOfTestSet)
{
/////// Area of interest ////////////
environment {
"${envVarName} = ${envVarValue}"
}
/////////////////////////////////////
try {
echo "Would run: "+pathToTestSet

} finally {
echo "Archive results here"
}
}
}
}

有一些包装代码运行这个,但是抽象出来我们会让调用者本质上使用:

generateStage("SimpleTestSuite", "path.to.test", "MachineA", "SOME_ENV_VAR", "ENV_VALUE")

其中最后两个参数是环境名称(SOME_ENV_VAR)和值(ENV_VALUE)

等效的声明代码是:

stage("SimpleTestSuite")
{
agent {
label "MachineA"
}
environment = {
SOME_ENV_VAR = ENV_VALUE
}
steps {
echo "Would run" + "path.to.test"
}
post {
always {
echo "Archive results"
}
}
}

但是,在运行此脚本时,第一个代码块中的environment 语法似乎根本不会影响实际执行。如果我回显 ${SOME_ENV_VAR}(或者甚至回显 ${envVarName} 以防它将此变量名称作为实际环境值)它们都返回 null。

我想知道使这个环境{}部分尽可能干/动态的最佳方法是什么?

如果有一个可扩展的解决方案可以接受 environmentName=Value 对列表,我会更喜欢它,因为这将是更一般的情况。

注意:我已经为脚本管道尝试了 withEnv[] 解决方案,但这似乎有同样的问题。

最佳答案

我想出了解决办法。

就是使用withEnv([])这一步

def generateStage(nameOfTestSet, pathToTestSet, machineLabel, listOfEnvVarDeclarations=[])
{
echo "Generating stage for ${nameOfTestSet} on ${machineLabel}"
return node("${machineLabel}") {
stage(nameOfTestSet)
{
withEnv(listOfEnvVarDeclarations) {
try {
echo "Would run: "+pathToTestSet

} finally {
echo "Archive results here"
}
}
}
}
}

调用方法是:

generateStage("SimpleTestSuite", "path.to.test", "MachineA", ["SOME_ENV_VAR=\"ENV_VALUE\""])

由于 withEnv([]) 这一步可以接受多个环境变量,我们还可以这样做:

generateStage("SimpleTestSuite", "path.to.test", "MachineA", ["SOME_ENV_VAR=\"ENV_VALUE\"", "SECOND_VAR=\"SECOND_VAL\""])

这将是有效的并且应该有效。

关于jenkins - 如何在脚本化的 Jenkins 管道中动态设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62413231/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com