如何在 Jenkinsfile 中指定类似以下内容?
当分支不是 x
我知道如何指定分支特定任务,例如:
stage('Master Branch Tasks') {
when {
branch "master"
}
steps {
sh '''#!/bin/bash -l
Do some stuff here
'''
}
}
但是,我想指定分支不是主分支或暂存的阶段,如下所示:
stage('Example') {
if (env.BRANCH_NAME != 'master' && env.BRANCH_NAME != 'staging') {
echo 'This is not master or staging'
} else {
echo 'things and stuff'
}
}
但是上述方法不起作用,并且失败并出现以下错误:
WorkflowScript: 62: Not a valid stage section definition: "if
WorkflowScript: 62: Nothing to execute within stage "Example"
注意我失败的尝试的来源:https://jenkins.io/doc/book/pipeline/syntax/#flow-control
解决了这个问题后,您现在可以执行以下操作:
stage('Example (Not master)') {
when {
not {
branch 'master'
}
}
steps {
sh 'do-non-master.sh'
}
}
您还可以使用
anyOf
: 指定多个条件(在本例中为分支名称)
stage('Example (Not master nor staging)') {
when {
not {
anyOf {
branch 'master';
branch 'staging'
}
}
}
steps {
sh 'do-non-master-nor-staging.sh'
}
}
在这种情况下,
do-non-master-nor-staging.sh
将在所有分支上运行,除了在master和staging上。
您可以在此处阅读有关内置条件和通用管道语法的信息。
您帖子中的链接显示了带有脚本化管道语法的示例。您的代码使用声明性管道语法。要在声明性中使用脚本化管道,您可以使用脚本步骤。
stage('Example') {
steps {
script {
if (env.BRANCH_NAME != 'master' && env.BRANCH_NAME != 'staging') {
echo 'This is not master or staging'
} else {
echo 'things and stuff'
}
}
}
}
对于那些想要使用 env 值并且在声明性管道的情况下并且您具有动态分支获取的人,您可以全局定义自己的变量并像下面一样使用。[变量“deployBranch”需要在管道之前声明并在中更新当前阶段之前的阶段或使用评估之前的阶段]
stage ('checkout-NonMaster') {
when {
not {
environment(name: "deployBranch", value: "master")
}
}
steps {
<anything goes here like groovy code or shell commands>
}
}
目前,这有效:
stage('my stage') {
when {
expression {
return env.GIT_BRANCH == "origin/main"
}
}
steps {
echo "GIT_BRANCH: ${env.GIT_BRANCH}"
echo "BRANCH_NAME: ${env.BRANCH_NAME}"
}
}