1.pipeline概述
1.1 什么是pipeline
从某种抽象层次上讲,部署流水线(Deployment pipeline)是指从
软件版本控制库
到用户手中
这一过程的自动化表现形式
。——《持续交付-发布可靠软件的系统方法》
pipeline 英语愿意为管道
,在Jenkins里面可以理解为,是一套工作流框架
,它将原本各个彼此独立的任务连接起来,实现一些比较复杂的工作流程,整个运行流程看起来就像是一个管道一样。
Jenkins 2.x可以支持pipeline as code,即通过代码
来描述部署流水线。使用代码
而不是UI的意义在于:
- 更好地版本化:将pipeline提交到版本管理库中,可以更好的进行版本管理
- 更好地协作:pipeline的每次修改对所有人均是可见的,也可对pipeline进行代码审查
- 更好的复用性:手动操作配置没有办法比较难直接复用,而代码则可以
- 更直观的工作流程:通过pipeline可以更加直观看到当前整个工作流所涉及到的各个环节等信息
1.2 pipeline 语法选择
Jenkins 团队在一开始实现Jenkins pipeline时,Groovy被选为基础来实现,因此在写pipeline时,很像是在写Groovy代码,从而有很大的灵活性和可扩展性。因此pipeline也被分成两种格式的语法:脚本式语法(Scripted)和声明式语法(Declarative)
- 脚本式语法
node {
stage("Build") {
println "构建应用"
}
stage("Test") {
println "测试应用"
}
stage("Deploy"){
try{
println "部署应用"
}
catch(err){
// 捕获异常
throw err
}
}
}
- 声明式语法
pipeline{
agent any
stages{
stage("Build"){
steps{
echo "构建应用"
}
}
stage("Test"){
steps{
echo "测试应用"
}
}
stage("Deploy"){
steps{
echo "部署应用"
}
}
}
post {
failure{
echo "运行失败"
}
}
}
以下两种语法格式差异如下所示:
- 脚本式
语法灵活
、可扩展
,也意味着更复杂
。适合于对于Groovy非常熟悉的团队或个人 - 声明式
语法简单
、更结构化
pipeline插件从2.5版本开始,同时支持两种格式的语法。后续示例均采用声明式语法
1.3 Jenkinsfile
Jenkinsfile是一个文本文件,是pipeline概念在Jenkins中的具体体现形式
。类似于Dockerfile与Docker的关系。
如果在Jenkins使用pipeline,需要确认是否安装pipeline插件。
pipeline 的代码可以直接写到Jenkins里面也可以通过版本管理工具来拉取。gitlab拉取示例如下所示:
脚本路径:就是pipeline的文件名,默认为Jenkinsfile