Hos*_*inK 23 groovy continuous-integration jenkins jenkins-pipeline
如何在Jenkinsfile中指定类似下面的内容?
当分支不是x
我知道如何指定分支特定的任务,如:
stage('Master Branch Tasks') {
when {
branch "master"
}
steps {
sh '''#!/bin/bash -l
Do some stuff here
'''
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我想指定分支不是主分区或分段的阶段,如下所示:
stage('Example') {
if (env.BRANCH_NAME != 'master' && env.BRANCH_NAME != 'staging') {
echo 'This is not master or staging'
} else {
echo 'things and stuff'
}
}
Run Code Online (Sandbox Code Playgroud)
但是,上述操作无效,并且失败并出现以下错误:
WorkflowScript: 62: Not a valid stage section definition: "if
WorkflowScript: 62: Nothing to execute within stage "Example"
Run Code Online (Sandbox Code Playgroud)
注意我失败的尝试来源:https://jenkins.io/doc/book/pipeline/syntax/#flow-control
Zac*_*wan 44
解决此问题后,您现在可以执行以下操作:
stage('Example (Not master)') {
when {
not {
branch 'master'
}
}
steps {
sh 'do-non-master.sh'
}
}
Run Code Online (Sandbox Code Playgroud)
Gio*_*ssi 23
您还可以使用以下命令指定多个条件(在本例中为分支名称)anyOf:
stage('Example (Not master nor staging)') {
when {
not {
anyOf {
branch 'master';
branch 'staging'
}
}
}
steps {
sh 'do-non-master-nor-staging.sh'
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,do-non-master-nor-staging.sh将在除master和staging 之外的所有分支上运行.
Phi*_*lip 13
您帖子中的链接显示了脚本管道语法的示例.您的代码使用声明性管道语法.要在声明中使用脚本化管道,可以使用脚本步骤.
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'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)