让 OR 在 Jenkins 管道上正常工作
Getting OR to work properly on Jenkins Pipeline
我试图禁止在管道上使用某些名称。
简单地说:“如果它是 name1 或 NAME1,则忽略 - 否则,继续”
但显然它不能正常工作。 (根据示例,仍然打印 hello)
如果我输入 "params.project != 'name1' || params.project != 'name1' "
它确实有效,我真的不明白为什么。
我在这里错过了什么?
pipeline {
agent { label 'master'}
parameters {
string(defaultValue: '', description: '', name: 'project')
}
stages {
stage ('project stage') {
steps {
script {
if (params.project != 'name1' || params.project != 'NAME1')
println "Hello"
}
}
}
}
}
它不是 的副本,因为我试图理解此行为背后的逻辑。
最后我选择了
if (params.project!= 'name') {
if (params.project!= 'NAME1') {
}
}
但我相信有比这更好的方法..
更新:
我找到了另一种方法,即使用 contains
if (project.contains('name'))
如果您的 objective 不允许将两个值都用于 project
参数,那么您需要 &&
逻辑运算符(“和”):
if (params.project != 'name1' && params.project != 'NAME1')
这将根据需要阻止参数的两个值。
或者,您也可以使用类似于以下的正则表达式:
if !(params.project ==~ /name1|NAME1/) // =~ if instead do not want to additionally require type match
我试图禁止在管道上使用某些名称。
简单地说:“如果它是 name1 或 NAME1,则忽略 - 否则,继续”
但显然它不能正常工作。 (根据示例,仍然打印 hello)
如果我输入 "params.project != 'name1' || params.project != 'name1' "
它确实有效,我真的不明白为什么。
我在这里错过了什么?
pipeline {
agent { label 'master'}
parameters {
string(defaultValue: '', description: '', name: 'project')
}
stages {
stage ('project stage') {
steps {
script {
if (params.project != 'name1' || params.project != 'NAME1')
println "Hello"
}
}
}
}
}
它不是
最后我选择了
if (params.project!= 'name') {
if (params.project!= 'NAME1') {
}
}
但我相信有比这更好的方法..
更新:
我找到了另一种方法,即使用 contains
if (project.contains('name'))
如果您的 objective 不允许将两个值都用于 project
参数,那么您需要 &&
逻辑运算符(“和”):
if (params.project != 'name1' && params.project != 'NAME1')
这将根据需要阻止参数的两个值。
或者,您也可以使用类似于以下的正则表达式:
if !(params.project ==~ /name1|NAME1/) // =~ if instead do not want to additionally require type match