如何在jenkinsfile中指定何时分支NOT(分支名称)?

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将在masterstaging 之外的所有分支上运行.

您可以在此处阅读有关内置条件和常规管道语法的信息.


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)