Jenkins2 将 Pipeline 提升至一等公民,和 Job 平级。用户可以用脚本的形式描述 Pipeline 的运行逻辑。本文简单总结 Jenkins2 中 两种 Pipeline 脚本: Declarative Pipeline 和 Scripted Pipeline 的语法。
背景
虽然 Jenkins 1 中可以将 Job 设置为级联关系以形成流水线,但是这样做不仅配置复杂,而且流水线关系不够直观。即使有 Pipeline 插件能观看流水线中各 Job 的关系,仍然限于简单的级联触发关系。
Jenkins2 将 Pipeline 提升至一等公民,和 Job 平级,Pipeline不再依附于 Job 存在。用户可以直接建立 Pipeline,而不再需要先建立单独的 Job。
同时,Jenkins2 还将描述 Pipeline 逻辑的方法,分离为独立的 Groovy 代码,用脚本的形式描述 Pipeline 的运行逻辑,而不再是用 web 页面的控件参与设置。要知道,虽然少量参数用鼠标设置起来方便,但是,遇到大量的参数、反复的设置、复杂的逻辑时,鼠标和 web 控件的方法不但表达能力欠佳,而且会严重降低设置的效率(比如下图)。而用代码的方法(再配合 SCM)就能清晰表达和方便修改。
但是截至目前,Pipeline 语法(官方链接)内容虽然丰富,但是不够成系统,略显细碎,难以找到想要的内容。本文希望能将常用的语法收集于一处,方便查阅。
两种类型
两种类型的脚本:Declarative Pipeline 和 Scripted Pipeline,本质上都是 Groovy 代码,所以都可以加上 Groovy 的 Shebang:
#!/usr/bin/env groovy
两种语法各有优缺点,不能一概而论哪种更优,需要根据使用场合选择使用。下面的表格简单对比二者的异同:
对比 | Declarative | Scripted |
---|---|---|
Groovy 语法 | 形式固定 | 支持更多语法 |
功能 | 丰富 | 较少 |
外观 | 更像配置文件 | 更像代码 |
Jenkins Workspace | 会自动检出Git | 不会自动检出Git |
所以一般情况下,应当选择形式较新的 Declarative Pipeline,但是如果你需要较多使用 Groovy 代码,那么只能选择 Scripted Pipeline.
下面分两篇文章总结各自的语法:
语法块
无论上述两种语法中的哪一种,都包含一种基本的语法结构,就是 pipeline 块:
any {
}
这种语法形式,来自 Groovy 的 Closure .
一个 Closure 就像一个匿名函数,可以作为函数方法的参数:
[1, 2, 3].each({ item ->
println "打印第 ${item} 个"
})
当 closure 是最后一个参数时,便可以从括号中独立出来,上面的语句写作(移除了括号的):
[1, 2, 3].each{ item ->
println "打印第 ${item} 个"
}
于是就得到了基本的 pipeline 指令格式。有些 pipeline 指令带有参数,则是下面的变形:
dir('/dir/', {...})
简化为
dir('/dir/') {...}
如果您对本文有疑问或者寻求合作,欢迎 联系邮箱 。邮箱已到剪贴板
精彩评论
本站 是个人网站,采用 署名协议 CC-BY-NC 授权。
欢迎转载,请保留原文链接 https://www.lfhacks.com/tech/jenkins-pipeline-syntax/ ,且不得用于商业用途。