一.创建多分支pipeline

在实际中,需要多分支同时进行开发。如果每个分支都创建一个Jenkins项目,比较多余。创建选择 Multibranch Pipeline

1.设置代码仓库地址,也就是要选择分支的仓库地址

2.设置分支扫描触发策略

分支扫描是指Jenkins根据一定的策略去代码仓库扫描分支,如果有新分支就创建一个以分支名命名的任务,如果发现有分支被删除了,就删除相应的Jenkins任务。

在"Scan Multibranch Pipeline Triggers"下就只有一一个可选项:Periodically if not otherwise run ( 没有手动触发,就定期扫描分支)。勾选此选项,设置扫描的间隔时长

读者可根据项目建立分支的频繁程度设置周期的长短。越频繁建立分支,扫描周期应越短。当然我们也可以单击任务页面左侧的"Scan Multibranch Pipeline Now"项,手动触发Jenkins去扫描分支。

3.孤儿任务(Orphaned Item)处理策略

如果在代码仓库中删除了release分支,那么在多分支任务页面上,该分支在Jenkins上的任务也应该被删除。至于什么时候删除,取决于下次分支扫描的时间。如果代码仓库中的分支被删除了,而Jenkins上的相应任务没有被删除,那么这个任务就被称为孤儿任务。

对于分支任务上的历史记录,保存多长时间是可以设置的

参数含义:

Days to keep old items: 保留多少天

Max#of old items to keep:最多保留多少个孤儿任务

二.根据分支部署

git分支可以用于对代码进行物理隔离。对分支的管理有很多方法,比如主干开发,发布分支以及Gitflow法等。我们不讨论它们的好坏,但不论使用哪种分支管理方法,都可能会涉及一个问题:如何根据不同的分支做不同的事情,比如根据不同的分支部署到不同的环境。

类似这样的事情可以使用if-else来实现

stage("deploy to test"){
steps{
script {
if (env.GIT_BRANCH == 'master') {
echo "deploy to test env"
}
}
}
} stage("deploy to prod"){
steps{
script {
if (env.GIT_BRANCH == 'release') {
echo "deploy to prod"
}
}
}
}

但是这样的代码不够优雅,而且不是声明式的。使用when指令可以让pipeline看起来更优雅。

stage("deploy to test") {
when {
branch 'master'
}
steps{
echo "deploy to test"
}
} stage("deploy to prod") {
when {
branch 'release'
}
steps {
echo "deploy to prod"
}
}

gitlab触发与多分支

对于GitLab来说,并没有Jenkins多分支pipeline的概念,所以GitLab只会触发Jenkins进行分支索引 ( branch index ) ,Jenkins可根据索引结果决定是否执行构建。对于多分支pipeline,Jenkins GitLab插件只监听push事件,不监听merge request事件。

而在Jenkins多分支pipeline项目的设置页面中,是找不到GitLab配置项的。只能通过修改Jenkinsfile来实现,在triggers指令中加入gitlab配置。

triggers {
gitlab(triggerOnPush: true,
triggerOnMergeRequest: true,
branchFilterType: 'Al1',
secretToken: "abcdefghijklmnopqrstuvwxyz0123456789ABCDEF")
}

值得一提的是,笔者通过实验发现,对于不同的分支使用不同的secretToken时,是以master分支的secretToken为准的。

Generic Webhook多分支

pipeline场景下的应用在多分支pipeline场景下,我们希望触发某个分支的构建执行,Generic Trigger可以这么传参

triggers {
GenericTrigger(
genericVariables:[
[key: 'ref' ,value: '$.ref']
],
token: env.J0B_NAME,
regexpFilterText: '$ref',
regexpFilterExpression: 'refs/heads/' + env.BRANCH_NAME
)
}

Jenkins多分支构建的更多相关文章

  1. jenkins多分支构建选择

    通常开发提交到git上的代码会有多个分支,比如master分支.release分支等,少则1.2个,多则10几20几个:当构建的时候,如果不配置多分支构建,每构建一个新的分支,就需要修改配置,如果没有 ...

  2. jenkins实现手动选择分支构建项目-Git Paramater

    先下载插件: Git Paramater 参照: jenkins-参数化构建(三)插件:Git Parameter https://www.cnblogs.com/zhaojingyu/p/98624 ...

  3. Jenkins:参数化构建:分支|模块|回滚|打印日志

    @ 目录 多分支 安装Git Parameter Plug-In 配置参数 选择构建分支 分模块 前提 分模块build 参数配置 分模块shell脚本 mvn 的基本用法 分模块运行 Jenkins ...

  4. jenkins windows slave 构建c/c++代码

    关于如何再centos系统上的jenkins master下搭建windows系统的jenkins slave节点,本篇博客中不做介绍,如果有需要的话,请参考我的另外一篇博客,在其中介绍了不同系统的j ...

  5. jira webhook 事件触发并程序代码调用jenkins接口触发构建操作

    要解决的问题 开发管理工具触发站点构建事件,事件处理中需要调用Jenkins接口开始构建动作. 我的应用场景: 使用jira作为管理工具,在jira中创建自定义的工作流来规定测试,上线,发布等流程,并 ...

  6. Jenkins的参数化构建

    一.参数化构建日志 1.查看效果 有时候开发需要查看服务器日志,传统的是需要运维登录服务器拉取开发所需要的服务日志,这么做的弊端是:1.如果日志比较大,拉取耗费时间.占用服务器资源.2.占用运维不必要 ...

  7. CI/CD之Gitlab集成Jenkins多分支pipeline实现质量检测和自动发布

    本次实施主要实现: 代码提交gitlab,自动触发Jenkins构建 gitlab发起Merge Request, 需要Jenkins检查通过才可以merge,实现代码review和质量管控 gitl ...

  8. Android Jenkins 自动化打包构建

    前言 在测试app项目过程中,通常都是需要开发打测试包给到测试,但是无论是iOS还是Android的打包过程都是相当漫长的,频繁的回归测试需要频繁的打包,对于开发同学影响还是蛮大的.因此在这种情况下, ...

  9. Jenkins+Sonar 项目构建前代码审查

    一.sonar简介 1.概述 Sonar (SonarQube)是一个开源平台,用于持续检查代码质量,不只是一个质量数据报告工具,更是代码质量管理平台. 支持Java, C#, C/C++, PL/S ...

随机推荐

  1. pytest-allure测试报告

    该类型的警告大多属于版本更新时,所使用的方法过时的原因,可以在该方法的说明出查找替换的方法 1.安装allure a)下载allure.zip https://github.com/allure-fr ...

  2. Matplotlib (一)

    Matplotlib 用于 创建出版质量图标的绘图工具库 目的是为python构建一个 Matlab 式的绘图接口 import matplotlib.pyplot as plt pyplot 模块包 ...

  3. 接口返回图片,前端生成临时url实现展示、下载效果

    请求一个后端接口 返回一张图片(打印后发现是二进制流) 瞬间不开心了(为什么不能后端处理好再让前端调用呢) 不过丝毫不慌好吧 先说处理逻辑:首先要将获取到的数据转换,这边选择以blob形式进行转换 主 ...

  4. 基于Netty4手把手实现一个带注册中心和注解的Dubbo框架

    阅读这篇文章之前,建议先阅读和这篇文章关联的内容. 1. 详细剖析分布式微服务架构下网络通信的底层实现原理(图解) 2. (年薪60W的技巧)工作了5年,你真的理解Netty以及为什么要用吗?(深度干 ...

  5. [noi707]LP

    (以下用$Sa=\sum_{j=1}^{i}xi\cdot ai$,Sb和Sc同理)令f[i][x]表示前i个数,$Sa\le x\le Sb$时最小的Sc考虑第i个数是否选择,可以得到递推式$f[i ...

  6. Java8-JVM内存区域划分白话解读

    前言 java作为一款能够自动管理内存的语言,与传统的c/c++语言相比有着自己独特的优势.虽然我们无需去管理内存,但为了防范可能发生的异常,我们需要对java内部数据如何存储有一定了解,已应对突发问 ...

  7. k8s-Pod污点与容忍

    目录 Pod污点与容忍 大白话先解释一下污点与容忍 为什么要用污点和容忍? 官方解释 Taints参数 标记污点 容忍污点 取消所有节点污点 Pod污点与容忍 大白话先解释一下污点与容忍 污点:被打上 ...

  8. Windows快捷键及cmd打开方式

    Windows快捷键 win+e 打开我的电脑 win+r 打开运行 ctrl+z 撤销 shift+del 彻底删除 alt+F4 关闭窗口 ctrl+c 复制 ctrl+a 全选 ctrl+x 剪 ...

  9. 洛谷 P3714 - [BJOI2017]树的难题(点分治)

    洛谷题面传送门 咦?鸽子 tzc 竟然来补题解了?incredible( 首先看到这样类似于路径统计的问题我们可以非常自然地想到点分治.每次我们找出每个连通块的重心 \(x\) 然后以 \(x\) 为 ...

  10. Codeforces 983E - NN country(贪心+倍增优化)

    Codeforces 题面传送门 & 洛谷题面传送门 一道(绝对)偏简单的 D1E,但是我怕自己过若干年(大雾)忘了自己的解法了,所以过来水篇题解( 首先考虑怎么暴力地解决这个问题,不难发现我 ...