Jenkins 2.x实践指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.2 pipeline的组成

Jenkins pipeline其实就是基于Groovy语言实现的一种DSL(领域特定语言),用于描述整条流水线是如何进行的。流水线的内容包括执行编译、打包、测试、输出测试报告等步骤。

本章对Jenkins pipeline的结构、语法进行详细介绍。

3.2.1 pipeline最简结构

前文中,我们已经了解到:从软件版本控制库到用户手中这一过程可以分成很多阶段,每个阶段只专注处理一件事情,而这件事情又是通过多个步骤来完成的,这就是软件工程的pipeline。Jenkins对这个过程进行抽象,设计出一个基本的pipeline结构。

• pipeline:代表整条流水线,包含整条流水线的逻辑。

• stage部分:阶段,代表流水线的阶段。每个阶段都必须有名称。本例中,build就是此阶段的名称。

• stages部分:流水线中多个stage的容器。stages部分至少包含一个stage。

• steps部分:代表阶段中的一个或多个具体步骤(step)的容器。steps部分至少包含一个步骤,本例中,echo就是一个步骤。在一个stage中有且只有一个steps。

• agent部分:指定流水线的执行位置(Jenkins agent)。流水线中的每个阶段都必须在某个地方(物理机、虚拟机或Docker容器)执行,agent部分即指定具体在哪里执行。我们会在第14章中进行详细介绍。

以上每一个部分(section)都是必需的,少一个,Jenkins都会报错。

3.2.2 步骤

pipeline基本结构决定的是pipeline整体流程,但是真正“做事”的还是pipeline中的每一个步骤。步骤是pipeline中已经不能再拆分的最小操作。前文中,我们只看到两个步骤:sh和echo。sh是指执行一条shell命令;echo是指执行echo命令。这两个步骤只是Jenkins pipeline内置的大量步骤中的两个。

那是不是说,Jenkins pipeline内置了所有可能需要用到的步骤呢?显然没有必要。因为有些步骤我们可能一辈子也不会用到。

更好的设计是:步骤是可插拔的,就像Jenkins的插件一样。如果现有的插件不用修改或者只需要简单修改,就能在Jenkins pipeline中当成一个步骤来使用,该多好?这样就不用重新实现一遍已经存在的插件了。

Jenkins就是这样做的,只需要对现有的插件进行一些修改,就可以在pipeline中被当成一个步骤使用。这样大大降低了从现有依赖于界面的插件过渡到pipeline中步骤的成本。

已经有哪些插件适配了Jenkins pipeline呢?pipeline plugin的GitHub仓库给出了一个列表(https://github.com/jenkinsci/pipeline-plugin/blob/master/COMPATIBILITY.md)方便大家检索,如图3-1所示(只截取了一部分)。

只要安装了这些适配了Jenkins pipeline的插件,就可以使用其提供的pipeline步骤。

Jenkins官方还提供了pipeline步骤参考文档(https://jenkins.io/doc/pipeline/steps/)。

图3-1 适配了Jenkins pipeline的部分插件列表