我们有很多声明式 Jenkins 管道代码,用于主环境中的某个 Jenkins 实例,现在我们希望为隔离环境创建第二个 Jenkins 实例,该实例应该使用相同的管道,但行为与在这里和那里进行一些调整。
我们区分这两个实例的方法是在 Jenkins master 中定义一个全局环境变量,这样我们就可以拥有条件阶段,以及在
when
下使用
script
和
stage
块的条件步骤块。 (例如
if (env.ENVIRONMENT == "ISOLATED") { <do something else> }
)
我们如何使用
parameters {}
和 options {}
块实现类似的效果?我知道我们可以使用共享库的“变量”来为 choice
参数提供不同的选项,但我们希望在某些情况下能够少 1 个/多 1 个参数,这些参数仅在以下情况下不相关/相关:特定环境。
如果您可以将 Pipeline 转换为脚本化 Pipeline,您应该能够很轻松地做到这一点。
if (env.ENVIRONMENT.contains("ISOLATED")) {
properties([
parameters([
string(name: 'Cloud', defaultValue: 'AWS', description: 'Cloud Type')
]),
// This is a option
buildDiscarder(
logRotator(
daysToKeepStr: '7',
numToKeepStr: '25'
)
)
])
} else {
println "If not set something different"
}
pipeline {
agent any
stages {
stage("Hello") {
steps {
echo "Building Something"
}
}
}
}
查看this了解如何生成选项片段。