所以根据上面的demo, 我们来看一下声明式的pipeline是怎么玩的。
首先pipeline必须有一个外层结构就是pipeline{} 表明这是一个pipeline。 pipeline下面是我们一个一个的参数和属性以及一步一步的步骤。
我们看到的第一个指令是agent, 这个指令告诉jenkins我们的任务要在哪里跑,
以前我们在UI上都会在job中设置限制当前job运行在哪些节点上这么个配置。
我们一般都会选择label为devops的节点(我们跑UI自动化和java sdk自动化都会在这上面跑)
所以在pipeline中agent最常用的方式就是上面demo中的 agent{label 'devops'}这样。
接下来我们再看,parameters规定了这个job的参数, 这里跟我们之前在UI上设置job的参数是一样的。
只不过这里我们通过parameters指令来规定参数了, 具体每种类型的参数怎么设置可以查看文档。
之后到了我们的重头戏stage, 意思是阶段, 我们跑的任务就是一个阶段接着一个阶段串行着跑的。 所以整体有一个stages指令,
之后下面定义了1个或N个stage来表明每一步我们都执行什么东西。比如上面的demo我们定义了3个stage,
分别是部署环境,拉取测试代码和进行测试。 而在每一个satge中我们又有steps来执行每一步的操作。
而在steps里就可以运行我们各个指令了。 比如在第一个stage里,我们只是用echo命令打印了一行字符串,
echo就是linux的那个echo指令。 而在第二个stage中,我们使用了git指令来拉取代码。 那我们怎么知道这个git指令怎么用呢,
可以参考快速入门中的自动生成pipeline脚本指令那一节,我们可以只用语法生成器来生成git指令该怎么用。
而到了第三个stage,我们发现下面多了一个parallel,它的意思是下面那两个小的stage是并发跑的,而不是串行执行的。
这是一个很常用的功能。 就比如我们的测试repo不止一个, 在上面的demo中我们希望执行UI自动化和sdk自动化测试,
为了加快执行速度我希望能同时运行这两个测试, 那么parallel就是我们最好的选择了。
最后我们看到了post 指令, 它必须在pipeline的最下面,对应着我们在UI上执行配置job时的 ”构建后操作“。
我们一般用来生成allure的测试报告以及发送邮件的能力
好了, demo讲到这里,下面开始搬官网的语法详解了。我是勤劳的搬运工~~~
三、Declarative Pipeline
Declarative Pipeline是Jenkins Pipeline 的一个相对较新的补充, 它在Pipeline子系统之上提出了一种更为简化和有意义的语法。
所有有效的Declarative Pipeline必须包含在一个pipeline块内,例如:
pipeline { /* insert Declarative Pipeline here */ }
Declarative Pipeline中的基本语句和表达式遵循与Groovy语法相同的规则 ,但有以下例外:
a.Pipeline的顶层必须是块,具体来说是:pipeline { }
b.没有分号作为语句分隔符。每个声明必须在自己的一行
c.块只能包含Sections, Directives, Steps或赋值语句。
d.属性引用语句被视为无参方法调用。所以例如,输入被视为input()
1.Sections(章节)
Declarative Pipeline里的Sections通常包含一个或多个Directives或 Steps
agent
该agent部分指定整个Pipeline或特定阶段将在Jenkins环境中执行的位置,具体取决于该agent
部分的放置位置。该部分必须在pipeline块内的顶层定义 ,但stage级使用是可选的。
为了支持Pipeline可能拥有的各种用例,该agent部分支持几种不同类型的参数。这些参数可以应用于pipeline块的顶层,也可以应用在每个st
age指令内。
参数
any
在任何可用的agent 上执行Pipeline或stage。例如:agent any
none
当在pipeline块的顶层使用none时,将不会为整个Pipeline运行分配全局agent ,每个stage部分将需要包含其自己的agent部分。