0

使用单个声明性管道(不是多分支管道)

有没有办法只有在它的主分支时才能触发某个阶段?

我在以下方面没有成功:

Stage('Deploy') {
    steps {
        script {
            if (env.BRANCH_ENV == 'master') {
                sh "mvn deploy"
            } else {
                echo 'Ignoring'
            }
        }
    }
}

无论我部署什么分支,一切都会被忽略

任何帮助或建议都会很棒

4

2 回答 2

0

我之前遇到过同样的问题,并认为 env.BRANCH_ENV 没有返回我所期望的。您可以在管道中回显 env.BRANCH_ENV 进行确认。

我对此的解决方案是手动获取 git 分支:

scmVars = checkout scm
gitBranch = sh(
    script: "echo ${scmVars.GIT_BRANCH} | cut -d '/' -f2",
    returnStdout: true
).trim()
于 2018-09-06T15:24:43.423 回答
0

这里有一些方法:

使用 return 命令提前完成阶段

https://stackoverflow.com/a/51406870/3957754

使用 when 指令

when指令允许流水线根据给定的条件确定是否应该执行阶段

内置条件:分支、表达式、allOf、anyOf、not 等。

when {
  // Execute the stage when the specified Groovy expression evaluates to true
  expression {
      return params.ENVIRONMENT ==~ /(?i)(STG|PRD)/
  }
}

完整样本:

https://gist.github.com/HarshadRanganathan/97feed7f91b7ae542c994393447f3db4

于 2018-09-07T04:39:41.623 回答