jenkins - 在同一个 repo 中对两个不同的作业使用相同的 Jenkinsfile
问题描述
我有两个单独的 Jenkins 作业,它们将在一个存储库上运行:我的 Jenkinsfile 有一个步骤将在启用此属性的情况下运行:enableZeroDownTime
. 第二个 Jenkins 作业的目的是在enableZeroDownTime
禁用此属性的情况下运行该步骤。有谁知道我如何使用相同的 Jenkinsfile 来控制它?我可以使用基于任何属性文件的一些参数来传递它吗?我真的很困惑。
stage('CreateCustomer') {
steps {
script {
common.runStage("@CreateCustomer")
common.runStage("@SetOnboardingCustomerManifest")
common.runStage("@enableZeroDownTime")
}
}
}
解决方案
解决方案
我目前运行多个使用相同 Jenkinsfile 的管道。有条件地执行阶段的更改是微不足道的。
stage('CreateCustomer') {
when {
environment name: 'enableZeroDownTime', value: 'true'
}
steps {
script {
common.runStage("@CreateCustomer")
common.runStage("@SetOnboardingCustomerManifest")
common.runStage("@enableZeroDownTime")
}
}
}
CreateCustomer阶段只会在 enableZeroDownTime 参数设置为 true 时运行(它可以是值为 true 的字符串参数,也可以是布尔参数)。
这里的技巧是你不能将parameters{}
块添加到你的声明性管道中。例如,如果您有以下情况
parameters {
string(name: 'enableZeroDownTime', defaultValue: 'true')
}
两个管道都将默认为 true。如果您有以下情况
parameters {
string(name: 'enableZeroDownTime', defaultValue: '')
}
两个管道都将默认为空白默认值。
即使您在创建后手动将不同的默认值保存到管道中,下次运行时也会使用空白默认值覆盖它。
相反,您只需parameters{}
完全删除该块并通过 Web 界面手动添加参数
此外...
此外,可以让两个管道使用具有不同参数的相同 Jenkinsfile。例如,假设管道 A 有一个默认为 true 的enableZeroDownTime参数,而管道 B 根本没有参数。在这种情况下,您可以添加一个同名的环境变量并将值设置为等于以下三元表达式
environment {
enableZeroDownTime = "${params.enableZeroDownTime != null ? "${params.enableZeroDownTime}" : false}"
}
然后,您可以在 when 声明性(或管道中的任何位置)中引用此参数,而不必担心管道会引发空指针异常。
推荐阅读
- java - 如何从 maven Central 构建 nifi 处理器 nar 文件和依赖项
- c# - Xamarin - 在对它的所有引用超出范围之前创建的调用 System.IDisposable.Disposeon 对象
- c++ - Swig C++:接口向量
- android - FCM:设备仅接收多个通知消息之一
- python - 在while循环结构中返回带有条件的有序元素列表
- typescript - VSCode Typescript 版本和 linter 不工作
- linux - 使用包含 10# 的表达式获取语法错误
- python - 如何使用硒单击网页中的图像
- android - 尽管代码看起来不错,但数据库不会从资产中复制
- java - Flink 运行时如何获取任务管理器 JVM 指标,例如“Status.JVM.Memory.Heap.Used”?