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

qvsjd97n  于 2023-08-02  发布在  Jenkins
关注(0)|答案(4)|浏览(127)

我如何在我的Jenkinsfile中指定类似下面的内容?

  • 当分支不是x*

我知道如何指定分支特定的任务,例如:

stage('Master Branch Tasks') {
        when {
            branch "master"
        }
        steps {
          sh '''#!/bin/bash -l
          Do some stuff here
          '''
        }
}

字符串
但是,我想指定一个阶段,当分支不是master或staging时,如下所示:

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

4smxwvx5

4smxwvx51#

解决了这个issue问题后,您现在可以执行以下操作:

stage('Example (Not master)') {
   when {
       not {
           branch 'master'
       }
   }
   steps {
     sh 'do-non-master.sh'
   }
}

字符串

vc9ivgsu

vc9ivgsu2#

您还可以使用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将在所有分支上运行**,除了**在 masterstaging 上。
您可以阅读有关内置条件和通用管道语法here的内容。

nue99wik

nue99wik3#

您的帖子中的链接显示了一个脚本化管道语法的示例。您的代码使用声明性管道语法。要在声明中使用脚本化管道,可以使用脚本步骤。

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'
            }
        }
    }
}

字符串

falq053o

falq053o4#

对于那些想要使用env值的人,如果是声明式管道,并且你有动态分支提取,那么你可以全局定义自己的变量,并像下面这样使用。[变量“deployBranch”需要在管道之前声明,并在当前阶段之前或使用评估之前更新]

stage ('checkout-NonMaster') {
                when {
                    not {
                        environment(name: "deployBranch", value: "master")
                    }
                }
                steps {

                        <anything goes here like groovy code or shell commands>
                }
            }

字符串

相关问题