如果分支条件不工作,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
使用单个声明性管道(不是多分支管道)
有什么方法可以触发某个阶段,只有当它是 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