结构
一个声明式流水线是由一个包含了一些指令和部分的外套代码块组成的。每个部分又可以包含其他的部分、指令和步骤,在某些情况下也会包含条件。
代码块
这里的一个代码块实际上指具有开头和结尾的任意一组代码。在Groovy中,其被转化成了一个闭包(一个代码部分,开头和结尾使用{和}括起来)。虽然流水线的很多部分严格来说都是代码块,这个术语主要用来描述整个pipeline代码块,其包含了与一个声明式流水线相关的所有代码。
部分
声明式流水线中的部分是一种方法,用于收集在整个流水线流程的某些特殊点上需要被执行的项目。这些被归组的项目可以包括指令、步骤和条件。以下三个部分被称为部分:
Stages
这个部分封装了用于定义流水线主体和逻辑的所有单个阶段定义(指令)。
Steps
这个部分可以在一个阶段定义中封装一组DSL步骤。它用来把一系列的步骤与阶段中的其他项目(比如环境定义)分隔开。
Posts
这个部分可以封装一些需要被执行的步骤或者检验的条件,可以定义在流水线的结尾或者一个阶段的结尾。
指令
流水线中的指令可以被认为是一个做任何以下事情的语句或代码块。
定义值
这种类型的一个示例就是agent指令,它允许我们指定一个节点或者容器来运行整个流水线或者一个阶段。如果我们想在节点worker上运行我们的流水线,则可以使用agent (‘worker’)。
配置行为
这种类型的一个示例就是triggers指令,它允许我们配置Jenkins多长时间一次去检查源码的更新或者触发我们的流水线。如果我们想每个工作日的早上7点触发我们的流水线,可以使用triggers { cron (‘0 7 0 0 1-5’) }。
指定要完成的行为
这种类型的一个示例就是stage指令,往往期望它拥有一个包含那些需要被执行的DSL步骤的steps部分。
步骤
在流水线的一个阶段中,这个steps标签本身是一个部分头衔。然而,在steps部分内部,我们可以使用任何合法的DSL语句,比如git、 sh、 echo等。你可以把这里的一个步骤认为是相应的这些语句中的一个。
条件
这里的条件指的是一个行为应该发生时需要满足的状态或标准。这些条件是可选的。有两种情况你可能需要使用条件。
When:严格地讲,这是一个指令。它存在于一个stage定义中,用来定义是否这个阶段应该被执行的条件。
Conditions代码块,存在于post部分中,用来定义进行后期处理的条件。这里的标准(条件)指的是构建的状态,比如success 或failure。