一、Jenkinsfile语法简介
- Jenkinsfile支持两种语法形式:
- Declarative pipeline - v2.5之后引入,结构化方式
-
Scripts pipeline -基于groovy的语法
image.png
二、Jenkinsfile语法-Declarative pipeline
- 必须包含在一个pipeline块内,具体来说是:
pipeline { }
- 基本的部分是“steps”,steps告诉Jenkins要做什么
- 语句分类具体包含Sections,Directives,Steps,赋值等几大类
Declarative 语句树
image.png- agent:定义pipeline执行节点
- 参数
- 必须出现的指令
- any:以在任意agent上执行pipeline
- none:pipeline将不分配全局同agent,每个stage分配自己的agent
- label:指定运行节点的Label
- node:自定义运行节点配置,
- 指定label
- 指定customWorkspace
- docker:控制目标节点上的docker运行相关内容
- 示例代码:
pipeline{
agent{
node{
label "myslave"
customWorkspace "myWorkspace"
}
}
}
必要参数
-
stages:包含一个或多个stage的序列,Pipeline的大部分工作在此执行
- 必须出现的指令
- 无参数
- 每个pipeline代码区间中必须只有一个stages
-
stage:包含在stages中,pipeline完成的所有实际工作都需要包含到stage中
- 必须出现的指令
- 无参数
- 需要定义stage的名字
-
steps:
- 必须出现的指令
- 无参数
- 具体执行步骤,包含在 stage代码区间中
-
示例代码:
stages{
stage('git pull source code'){
steps{
echo 'sync update code'
git 'https://github.com/priceqjzh/iPipeline.git'
}
}
}
非必要参数post
-
post:定义Pipeline或stage运行结束时的操作
-
参数
- 不是必须出现的指令
- always:无论Pipeline运行的完成状态如何都会运行
- changed:只有当前Pipeline 运行的状态与先前完成的Pipeline的状态不同时,才能运行
- failure:仅当当前Pipeline处于“失败”状态时才运行
- success:仅当当前Pipeline具有“成功”状态时才运行
- unstable:只有当前Pipeline具有“不稳定”状态才能运行
- aborted:只有当前Pipeline处于“中止”状态时才能运行
-
示例代码
post{
success{
echo 'goodbye pipeline success'
sleep 2
}
always{
echo 'always say goodbye'
}
}
非必要参数environment
- environment:定义Pipeline或stage运行时的环境变量
- 参数
- 不是必须出现的指令
- 无参数
- 示例代码:
environment{
hlw='hello world'
}
stages{
stage('Print environment_1'){
steps{
echo hlw
}
}
}
非必要参数options
- options:定义pipeline的专有属性
- 参数
- 不是必须出现的指令
- buildDiscarder:保持构建的最大个数
- disableConcurrentBuilds:不允许并行执行pipeline任务
- timeout:pipeline 超时时间
- retry:失败后,重试整个Pipeline的次数
- timestamps:预定义由Pipeline生成的所有控制台输出时间
- skipStagesAfterUnstable:一旦构建状态进入了“Unstable”状态,就跳过此stage
- 示例代码:
options{
timeout(time:30, unit:'SECONDS')
buildDiscarder(logRotator(numToKeepStr:'2'))
retry(5)
}
非必要参数
- parameters:定义pipeline的专有参数列表
- 参数
- 不是必须出现的指令
- 支持数据类型:booleanParam,choice,credentials,file,text,password,run,string
- 类似参数化构建的选项
- 示例代码:
parameters{
string(name:'PERSON', defaultValue:'Jenkins', description:'输入的文本参数')
}
stages{
stage('Test Parameters'){
steps{
echo "Hello ${params.PERSON}"
}
}
}
非必要参数triggers
- triggers:定义了Pipeline自动化触发的方式
- 参数
- 不是必须出现的指令
- Cron:接受—个cron风格的字符串来定义Pipeline触发的常规间隔
- pollSCM:接受一个cron风格的字符串来定义 Jenkins检查SCM源更改的常规间隔;如果存在新的更改,则Pipeline将被重新触发。
- 示例代码:
triggers{
pollSCM('H */4 * * 1-5')
}
三、Jenkinsfile语法Scripts pipeline
- 基于groovy语法定制的一种DSL语言
- 灵活性更高
- 可扩展性更好
- Script pipeline 与 Declarative pipeline程序构成方式有雷同之处,基本语句也有相似之处
Script 语句树
image.png流程控制之 - if/else
node{
stage('Example'){
if (env.BRANCH_NAME == 'master'){
echo 'I only execute on the master brach'
}else{
echo 'I execute elsewhere'
}
}
}
流程控制之 - try/catch
node{
echo 'This is test stage which run on the slave agent.'
try{
echo 'This is in the try block.'
}catch(exc){
echo "Something failed, I'm in the catch block"
}finally{
echo "Finally, I'm in the finally block."
}
}
groovy 语句设置
- groovy语句控制环境变量与运行命令
- 定义maven工具变量的名称与位置
- 定义java工具变量的名称与位置
- 工具设置位置“Manage Jenkins” -> “Global Tool Configuration”
image.png
image.png
- script 代码中引用、配置环境变量
-
script代码中引用maven具与java工具
image.png
网友评论