目录
一、pipeline
二、创建pipeline项目
1、安装pipeline插件
2、创建pipeline项目
三、pipeline语法
1、pipeline组成
2、agent:指定流水线的执行位置,流水线中每个阶段都必须在某个地方执行
3、stage:阶段,代表流水线的阶段,每个阶段都必须要有名称,且各个名称不能重名
4、stages:stage的集合,stages部分至少包含一个stage
5、steps:代表stage阶段中的一个或者多个步骤,steps部分至少包含一个步骤
2、pipeline其他指令
1、post:包含的是在整个pipeline或stage完成后的附加步骤
2、environment:用于设置环境变量,可定义在stage或pipeline部分,环境变量可以设置为全局的,也可以设置为阶段级别(stage)的
3、tools:可定义在pipeline或stage部分,配置我们指定的工具,并将其加入到PATH变量中(工具名称必须在Jenkins的全局工具配置中存在)
4、options:用于配置Jenkins pipeline本身的选项,options指令可以定义在stage或pipeline部分
5、parameters:在构建前定义参数化构建,支持booleanParam, choice, credentials, fifile, text,password, string等参数类型
6、triggers:定义执行pipeline的触发器
用户可以在一个 Jenkinsfile 中快速实现一个项目的从构建、测试以及到发布的完整流程,灵活方便地实现持续交付,并且可以保存和管理这个Jenkinsfile的定义。
从Jenkins V2.0版本开始,Pipeline是Jenkins2.X的最核心的特性,帮助Jenkins实现从CI到CD与DevOps的转变。
【自由风格任务】对比【流水线】
Freestyle Jobs | Pipeline |
---|---|
通过UI页面配置 | 通过代码配置(groovy开发的,基于java的脚本语言) |
配置变化不能追溯 | 可以通过SCM(代码版本管理)追溯 |
迁移需要重新创建任务 | 方便任务配置迁移 |
每个任务对应每个阶段(构建、测试、发布) | 单个任务中完成所有阶段的编排 |
Jenkins Pipeline通常会写入到一个文本文件中(称为Jenkinsfile),该文件可以通过SCM(代码版本管理)系统管理(比如从Git上拉取脚本)
脚本式(Scripted Pipeline)—— 比如一些if判断等逻辑,脚本式里面不能包含声明式
声明式(Declarative Pipeline)—— 一般用这个比较多,官方也比较推荐,声明式里面可以包含脚本式,更简单更加结构化的语法,官网推荐使用
基本结构:以下每一部分都是必须的,少一个Jenkins都会报错
pipeline {
agent any //表示在哪个节点运行:任意
stages {
stage('Hello') { //名字各不相同
steps {
echo 'Hello World' //具体要做的事情
}
}
stage('Hello1') {
steps {
echo 'Hello World1'
}
}
}
}
1、pipeline:代表整条流水线,包含整条流水线的逻辑
none : 当在pipeline块的顶层使用none时,将不会为整个Pipeline运行分配全局agent ,每个stage部分将需要包含其自己的agent部分
any : 在任何可用的agent 上执行Pipeline或stage
label : 指定具体的 Jenkins Slave Node,也可以单独指定Stage的执行环境
always:无论pipeiline运行的完成状态如何都会执行这段代码
changes:只有当前pipeline运行的完成状态与先前完成的pipeline的状态不同时,才会执行
failure:当前完成状态为失败时执行
success:当前完成状态为成功时执行
unstable:当前完成状态为不稳定时执行(测试失败/代码违规问题)
aborted:当流水线被手动终止时
post{
always {
echo 'will always execute'
}
}
environment { aaa = 'bbb' }//定义环境变量
${env.JOB_NAME} //访问Jenkins内置变量
${env.aaa} //访问自定义变量
tools { maven 'maven3.6.1'}
options{
buildDiscarder(logRotator(numToKeepStr:'3')) //保存最近历史构建记录的数量
timeout(time:1,unit:'HOURS')//job执行的超时时间
disableConcurrentBuilds()//禁止job同时执行
retry(3)//失败重试次数
}
parameters{
choice(name:'environ',choices:'test\ndev\nstg', description:'请选择测试环境 dev? test? stg?')
string(name:'version',defaultValue:'0.0.0',description:'当前构建版本号')
}
${params.environ}//通过 params访问对应参数
triggers {
cron('0 19 * * 1-5')
pollSCM('0 */2 * * 1-5')
}