我正在尝试创建一个只应为某些 Gerrit 项目运行的 Jenkins 管道步骤。特别是,对于变量 GERRIT_PROJECT 以“platform/zap”开头的所有项目。 可悲的是,我缺乏 Groovy 技能。
这是我到目前为止得到的:
stage ('zap') {
when {
expression {
isMatch = env.GERRIT_PROJECT =~ /^platform\/zap/
return isMatch
}
}
steps {
build job: 'Zap', parameters: [
string(name: 'ZAP_PROJECT', value: env.GERRIT_PROJECT)
]
}
}
换句话说,stage 应该为“platform/zap/os”执行,而不是为“app/hello”执行。
任何指导将不胜感激。
最佳答案
如果 env.GERRIT_PROJECT
以 platform/zap开头,您可以使用
.String.startsWith(str)
返回 true
stage ('zap') {
when {
expression {
env.GERRIT_PROJECT?.startsWith("platform/zap")
}
}
steps {
build job: 'Zap', parameters: [
string(name: 'ZAP_PROJECT', value: env.GERRIT_PROJECT)
]
}
}
如果 env.GERRIT_PROJECT
由于某种原因为 null,为了避免 NPE,您可以使用 NPE 安全运算符 ?.
来调用 startsWith
方法.
将 Groovy 的精确匹配运算符与正则表达式结合使用的替代解决方案可能如下所示:
stage ('zap') {
when {
expression {
env.GERRIT_PROJECT ==~ /^platform\/zap(.*)$/
}
}
steps {
build job: 'Zap', parameters: [
string(name: 'ZAP_PROJECT', value: env.GERRIT_PROJECT)
]
}
}
关于Jenkins 管道中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59386882/