Jenkins作为热门的自动化构建工具,一直都在发展。
几年前推出了流水线(Pipeline)
主导思想就是pipeline as code,用代码来编写自动化流水线。
采用groovy作为语言。
node {
stage('stage1') {
if (env.BRANCH_NAME == 'master') {
echo 'master branch'
} else {
echo 'not master branch'
}
}
}
就像一般的脚本语言一样,groovy带来的自由度,使得一切都可能实现。
同时自由度带来的问题是,pipeline脚本的随意性。简单的脚本几百行,大项目就算写个几千行都没有问题。而且脚本的自由,带来结构的自由,使得脚本难以维护。
新的pipeline脚本,声明式,定义了一堆语句,为的就是能够控制pipeline脚本编写的自由度。让用户真正去思考为什么要写pipeline,哪些需要写入pipeline。
下面是一个声明式的pipeline脚本。
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Hello World'
}
}
stage('Deploy') {
when {
branch 'production'
}
steps {
echo 'Deploying'
}
}
}
}
同时提供一个特殊的step,script step,在这个模块里面可以任意的写脚本来完成任务,保持了原有的自由度。
如何区分两种写法呢,其实很简单。
1. 脚本式的,以node语句开头,
2. 而声明式的以pipeline语句开头。
Jenkins的官方文档并没有直说推荐使用声明式的脚本。但是还是很明显能够看出如果编写新的pipeline,我们应该选择声明式的。
1. 声明式是新推出的,说明Jenkins设计者认为原来的脚本式会引发一些问题,应该就是我说的,过于自由,结构容易混乱。
2. 官方文档介绍声明式的篇幅是脚本式的10倍之多。
3. 声明式介绍在文档的头部,也就是你如果不把文档读到底,可能都不知道有脚本式一说。
如果没有历史遗留代码,建议上声明式的pipeline脚本,如果有遗留代码,也建议在修改或者修复问题的时候,往声明式进行转换。