Jenkins2 学习系列10 -- 多分支pipeline构建
时间:2022-06-26
本文章向大家介绍Jenkins2 学习系列10 -- 多分支pipeline构建,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一个项目可能会有很多分支,Jenkins 支持创建多分支pipeline的任务。
创建多分支项目
新建 "Item" 直接选择 "Multibranch Pipeline" 即可
image.png
配置页面有很多选项,大致讲下
image.png
image.png
使用 when 指令
我们需要判断针对不同分支做不同事情,使用 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指令的用法
when指令允许pipeline根据给定的条件,决定是否执行阶段内的步骤。when指令必须至少包含一个条件。when指令除了支持branch判断条件,还支持多种判断条件。
- changelog:如果版本控制库的changelog符合正则表达式,则执行
- changeset:如果版本控制库的变更集合中包含一个或多个文件符合给定的Ant风格路径表达式,则执行
when {
changeset "**/*.js"
}
- environment:如果环境变量的值与给定的值相同,则执行
when {
environment name: 'DEPLOY_TO', value: 'production'
}
- equals:如果期望值与给定的值相同,则执行
when {
equals expected: 2, actual: currentBuild.number
}
- expression:如果Groovy表达式返回的是true,则执行 当表达式返回的是字符串时,它必须转换成布尔类型或null;否则,所有的字符串都被当作true处理。
when {
expression {
return env.BRANCH_NAME != 'master'
}
}
- building Tag:如果pipeline所执行的代码被打 了tag,则执行
- tag:如果pipeline所执行的代码被打了tag,且tag名称符合规则,则执行 如果tag的参数为空,即tag (),则表示不论tag名称是什么都执行,与buildingTag的效果相同。
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:所有条件都必须符合。下例表示当分支为master且环境变量DEPLOY TO的值为production时,才符合条件。
allOf {
branch "master";
environment name: 'DEPLOY_TO', value: 'production'
}
注意,多条件之间使用分号分隔。
- anyOf:其中一个条件为true, 就符合。下例表示master分支或staging分支都符合条件。
anyOf {
branch "master";
branch "staging";
}
Generic Webhook Trigger 插件在多分支pipeline场景下的应用
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的分支名
参考
converting-conditional-to-pipeline/
- 第十五届北京师范大学程序设计竞赛现场决赛题解&源码(A.思维,C,模拟,水,坑,E,几何,思维,K,字符串处理)
- python+requests接口自动化项目完整框架设计
- POJ 1804 Brainman(5种解法,好题,【暴力】,【归并排序】,【线段树单点更新】,【树状数组】,【平衡树】)
- 关关的刷题日记03—Leetcode 448. Find All Numbers Disappeared in an Array
- 关关的刷题日记04——Leetcode 283. Move Zeroes
- UESTC 1591 An easy problem A【线段树点更新裸题】
- 关关的刷题日记05 —— Leetcode 219. Contains Duplicate II
- 关关的刷题日记05 —— Leetcode 217. Contains Duplicate 方法1和方法2
- HDU 2602 Bone Collector(01背包裸题)
- Appium+python自动化13-native和webview切换
- HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
- 专知内容生产基石-数据爬取采集利器WebCollector 介绍
- python实现字符串模糊匹配
- 动态规划之01背包详解【解题报告】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法