Jenkins Pipeline预研

Jenkins1.x 背景

​ 在Jenkins1.x版本中,持续集成是通过web UI进行交互的,就是说任务的创建、配置以及任务间的关联关系都是通过页面进行管理和维护的。CI构建方面,任务间并没有太多的依赖关系,相对来说比较容易管理。但是在CD方面,引入了测试、发布、部署、环境迁移、运营反馈等等的流程,独立运行的任务之间有了依赖关系,而且不同的任务需要在不同的节点去完成。

​ 如果产品是微服务架构的,服务之间可能需要协同发布,任务之间的关系会更为复杂和繁琐,如果在Jenkins的Dashboard界面进行任务的集中管理和配置很容易出错,比如多人协作修改一个流程任务出现“修改丢失”以及某个服务升级出现问题需要版本的回退等等,都需要人为的去修改Job,这样的话任务管理就会成为服务发布的一个瓶颈。

Jenkins2.x Pipeline

What is Jenkins Pipeline?

Jenkins Pipeline (or simply “Pipeline” with a capital “P”) is a suite of plugins which supports implementing and integrating continuous delivery pipelines into Jenkins.

​ Jenkins2.X版本开始就引入了Pipeline这个概念。由官方定义可知,pipeline指的是通过Jenkins服务,可以实现CI/CD功能的一系列插件。

​ Jenkins2.x的精髓是Pipeline as Code,使用简单的声明式语法或者Groovy DSL脚本进行流程描述。

Why Pipeline?

Jenkins is, fundamentally, an automation engine which supports a number of automation patterns. Pipeline adds a powerful set of automation tools onto Jenkins, supporting use cases that span from simple continuous integration to comprehensive CD pipelines. By modeling a series of related tasks, users can take advantage of the many features of Pipeline:

  • Code: Pipelines are implemented in code and typically checked into source control, giving teams the ability to edit, review, and iterate upon their delivery pipeline.
  • Durable: Pipelines can survive both planned and unplanned restarts of the Jenkins master.
  • Pausable: Pipelines can optionally stop and wait for human input or approval before continuing the Pipeline run.
  • Versatile: Pipelines support complex real-world CD requirements, including the ability to fork/join, loop, and perform work in parallel.
  • Extensible: The Pipeline plugin supports custom extensions to its DSL [1] and multiple options for integration with other plugins.

使用pipeline的好处

​ 第一点:用代码的形式描述任务的配置和任务之间的关系,就是使用代码来控制项目的构建、测试、部署等,非常灵活,而且便于扩展。项目配置的代码放在Gitlab上统一管理,这样项目配置管理就可以像维护代码一样,进行修改、提交、代码review、版本回退等等。

​ 第二点:既然是用代码进行控制,那么整个构建部署流程就可以使用代码进行人为的干预,比如某个阶段出现异常信息的打印,要不要继续下一阶段,某个阶段任务运行情况也可以可视化显示,并进行问题定位以及优化等等。

​ 第三点:就是比如Pipeline是独立于Jenkins主进程的,如果master意外停掉,也不会影响pipeline程序的运行,还有就是用代码控制流程后,可以进行任务间复杂的交互,并行执行等等操作,最后就是支持DSL的扩展,可以根据自己需要进行自定义需要的功能。

个人总结

​ Pipeline的话,可以翻译成流水线,而流水线在其他行业尤其是制造行业,很多年前就提出了这种概念,比如汽车制造行业,流水线通过分而治之的方式生产零件,最后进行汽车的组装,提高了生产效率,机器的出现推动了自动化流水线的发展,从而大幅度的加快了生产效率。

​ 同理,在软件开发行业,人们也希望加快软件产品的开发生命周期,由于软件产品本身是虚拟的,开发和测试会出现很多问题,需要很多人进行协作,运行部署环境也比较复杂等等因素,导致进展一直很缓慢。

​ 近几年,随着云计算、微服务、容器技术的出现,使得软件行业流水线生产模式的落地成为可能,而Jenkins的话,可以理解成一个流水线车间(引擎),pipeline技术推动了该车间自动化流水线的发展,至于自动化过程中,使用哪些机器,怎么去更好的提高生产效率,现在没有一个标准,所以目前,Jenkins的Pipeline使用方面,还没有一个被大多数人接受的最佳实践。

​ 注:从软件上来讲,Jenkins的插件数量太多,质量也参差不齐,很容易出现安全方面的漏洞,使用的时候,需要注意。

Jenkins Pipeline预研相关推荐

  1. Jenkins Pipeline 构建复杂的Electron程序

    最近一年都在捣腾Electron,从0.X版本,到现在最新Stable的3.X版本.一路上踩的坑很多,Electron的版本号也飞快的.项目设立的初衷是一份代码,即可构建出Windows和Mac,并且 ...

  2. Jenkins Pipeline 语法

    目录 声明性pipeline Sections agent pipeline与stage中的不同 参数 常用选项 发布 post stages steps Directives environment ...

  3. Jenkins Pipeline 脚本

    我常说 2019 年对于我来说是转折性的一年,提前完成了前半辈的很多事情.有些事还是要提前规划,要不然轮到身上的时候会措手不及.这次疫情很多人都会在家,很多人羡慕自由职业者,然并卵,这下应该都能体会到 ...

  4. 基于熵权法优劣解距离法_维普资讯中文期刊服务平台-基于改进TOPSIS方法的航空装备预研项目技术风险评估...

    摘 要:技术风险是引发费用风险和进度风险的主要因素,因此在航空装备的研制中需要重点管控和规避.为提供可靠的航空装备预研项目技术方案的选择依据,采用改进的TOPSIS方法对五种不同航空装备预研方案的技术 ...

  5. Jenkins Pipeline构建流水线发布

    Jenkins Pipeline构建流水线发布 1. Jenkins Pipeline 核心概念 Jenkins Pipeline是一套插件,支持在Jenkins中实现持续集成.交付管道; Pipel ...

  6. Jenkins Pipeline动态使用Git分支名称的技巧

    前言 在上一篇 Jenkins 使用环境变量 中,帮助大家使用一条 Docker 命令就可以快速玩转 Jenkins,同时用最简单的方式解释了 Jenkins 中让人混乱的环境变量,本文还是接着变量说 ...

  7. Jenkins Pipeline插件十大最佳实践!

    Jenkins Pipeline 插件对于 Jenkins 用户来说可以让用户能够改变游戏规则.基于 Groovy 中的领域特定语言(DSL),Pipeline 插件使 Pipelines 可以有脚本 ...

  8. Android O 前期预研之一:Android Treble 计划

    Android O 前期预研 之前一直传言android O的推出会包含有两部分的主要功能: 谷歌打算彻底解决Android版本碎片化的问题,会在Android O上推出一个新的框架设计来解决这个这个 ...

  9. Android平台监听系统截屏方案预研及相关知识点

    最近有个针对系统截屏的需求,所以预研了Android平台上捕获系统截屏的方案. 最直接的方式就是监听手机的系统截屏组合键(电源键+音量下键),但是这种方式实现难度大,且有的机型使用特殊手势进行截屏,兼 ...

最新文章

  1. 永远不要在代码中使用「User」这个单词!
  2. KEIL5.11安装小结
  3. irobot擦地机器人故障_懒人必备神器,电动高频擦地,科沃斯地宝T8 AIVI扫地机器人...
  4. 前端框架Bootstrap 教程
  5. JAVA正则忽略大小写
  6. python类的继承super方法_Python类的继承super相关原理解析
  7. SQLServer------聚集索引和非聚集索引的区别
  8. 【LeetCode笔记】22.括号生成(Java、DFS回溯、剪枝、括号)
  9. python 二维列表从小到大_给Python开发者准备的110道面试题
  10. Xcode7 无账号真机测试!!
  11. PAT (Basic Level) Practice (中文)答案合集
  12. 一个对Winsock完成端口模型封装的类
  13. java7 32位官方下载_【java7】64位+32位官方下载
  14. 六十八个经典管理小故事
  15. C语言数据结构、十字链表的分析及实现
  16. 使用vlmcsd搭建KMS服务器激活环境
  17. 灵活的IP网络测试工具——— X-Launch
  18. LOL云顶弈记牌易语言源码
  19. 计算机里的硬盘分区,Disk Genius对电脑硬盘分区的详细步骤
  20. (孔乙己茴香豆的的“茴”字有几种写法)三栏布局两边固定中间自适应

热门文章

  1. RS485通信的学习以及思考
  2. win10离线安装framework3.5以及dism找不到源文件解决方法(已测试有效)
  3. 使用 Jenkins 创建微服务应用的持续集成
  4. Canvas学习笔记 Canvas的基础知识点
  5. HTML+CSS实现按钮手风琴效果 | 青训营笔记
  6. 标准型微电脑酸碱度氧化还原电位控制器(UPH -100C)
  7. 手机端上传照片压缩功能canvas
  8. Android 5.1 AppOps总结
  9. Problem E. L04-05 计算银行存款余额和利息(单利计算简单问题)
  10. ORACLE等待事件相关