如果分支条件不工作,Jenkins 声明性单一管道

Jenkins declarative single pipeline if branch condition not working

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

有什么方法可以触发某个阶段,只有当它是 Master 分支时?

我在以下方面没有成功:

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

无论我部署哪个分支,一切都会被忽略

任何帮助或建议都将是很好的

我之前遇到过同样的问题,我认为 env.BRANCH_ENV 与我预期的 return 不一样。您可以在管道中回显 env.BRANCH_ENV 以确认。

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

scmVars = checkout scm
gitBranch = sh(
    script: "echo ${scmVars.GIT_BRANCH} | cut -d '/' -f2",
    returnStdout: true
).trim()

这里有一些方法:

使用return命令提前完成阶段

使用 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