一个项目可能会有很多分支,Jenkins 支持创建多分支pipeline的任务。
新建 "Item" 直接选择 "Multibranch Pipeline" 即可
image.png
配置页面有很多选项,大致讲下
image.png
image.png
我们需要判断针对不同分支做不同事情,使用 if else 比较low,不够优雅
stage("deploy to test") {
steps {
script {
if (env.GIT_NAME == 'testing') {
echo 'deploy to test'
}
}
}
}
可以使用when指令
stage("deploy to test") {
when {
branch 'testing'
steps {
echo 'deploy to test'
}
}
}
stage("deploy to prod") {
when {
branch 'production'
steps {
echo 'deploy to prod'
}
}
}
when指令允许pipeline根据给定的条件,决定是否执行阶段内的步骤。when指令必须至少包含一个条件。when指令除了支持branch判断条件,还支持多种判断条件。
when {
changeset "**/*.js"
}
when {
environment name: 'DEPLOY_TO', value: 'production'
}
when {
equals expected: 2, actual: currentBuild.number
}
when {
expression {
return env.BRANCH_NAME != 'master'
}
}
when {
tag "release-*"
}
tag 条件支持comparator参数,支持的值如下: -- EQUALS:简单的文本比较。
when {
tag "release-3.1", comparator: "EQUALS"
}
-- GLOB (默认值):Ant风格路径表达式。由于是默认值,所以使用时一般省略。完整写法如下:
when {
tag "release-*", comparator: "GLOB"
}
-- REGEXP:正则表达式。使用方法如下:
when {
tag "release-\\d+", comparator: "REGEXP"
}
tag条件块非常适合根据tag进行发布的发布模式。
以上介绍的都是单条件判断,when指令还可以进行多条件组合判断。
allOf {
branch "master";
environment name: 'DEPLOY_TO', value: 'production'
}
注意,多条件之间使用分号分隔。
anyOf {
branch "master";
branch "staging";
}
Generic Webhook Trigger 在之前已经介绍过,可以这么传参
triggers {
GenericTrigger(
genericVariables: [
[key: 'ref', value: '$. ref']
],
token: env.JOB_NAME ,
regexpFilterText: '$ref',
regexpFilterExpression: 'refs/heads/' + env.BRANCH_NAME,
)
}
env.BRANCH_NAME 为当前pipeline的分支名