Jenkins Pipeline预研

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的插件数量太多,质量也参差不齐,很容易出现安全方面的漏洞,使用的时候,需要注意。

你可能感兴趣的:(工具使用)