pipeline语法基础
Declarative:声明式
Scripted pipeline :脚本式
声明式语法包括以下核心流程:
1.pipeline : 声明其内容为一个声明式的 pipeline 脚本
2.agent: 执行节点(job 运行的 slave 或者 master 节点)
3.stages: 阶段集合,包裹所有的阶段(例如:打包,部署等各个阶段)
4.stage: 阶段,被 stages 包裹,一个 stages 可以有多个 stage
5.steps: 步骤,为每个阶段的最小执行单元,被 stage 包裹
6.post: 执行构建后的操作,根据构建结果来执行对应的操作
1. pipeline
pipeline {
这里填写具体的语法,外面表示是一个声明式的pipeline
}
2. agent
- 作用域:可用在全局与 stage 内
- agent 表明此 pipeline 在哪个节点上执行
- 是否必须:是
- 参数:any,none, label, node,docker,dockerfile
agent any #运行在任意的可用节点上
agent none #全局不指定运行节点,由各自 stage 来决定
agent { label 'master' } #运行在指定标签的机器上,具体标签名称由 agent配置决定
agent {
node {
label 'my-defined-label'
customWorkspace 'xxxxxxx'
}
}
# node{ label 'master'} 和 agent { label 'master' }一样,但是 node 可以扩展节点信息,允许
额外的选项 (比如 customWorkspace )。
agent { docker 'python' }
#使用指定的容器运行流水线,如:
agent {
docker {
image 'maven:3-alpine'
label 'my-defined-label'
args '-v /tmp:/tmp'
}
}
# 定义此参数时,执行 Pipeline 或 stage 时会动态的在具有 label 'my-defined-label'标签的node 提供 docker 节点去执行 Pipelines。 docker 还可以接受一个 args,直接传递给 docker run 调用。
agent {
// Equivalent to "docker build -f Dockerfile.build --build-arg version=1.0.2 ./build/
dockerfile {
filename 'Dockerfile.build'
dir 'build'
label 'my-defined-label'
additionalBuildArgs '--build-arg version=1.0.2'
}
}
3. environment
environment 指令指定一系列键值对,这些键值对将被定义为所有 step 或 stage-specific step的环境变量
4. options
options 指令允许在 Pipeline 本身内配置 Pipeline 专用选项。Pipeline 本身提供了许多选项,例如 buildDiscarder,但它们也可能由插件提供,例如 timestamps。
buildDiscarder: pipeline 保持构建的最大个数。用于保存 Pipeline 最近几次运行的数据,如:options { buildDiscarder(logRotator(numToKeepStr: '1')) }
disableConcurrentBuilds: 不允许并行执行 Pipeline,可用于防止同时访问共享资源等。例如:options { disableConcurrentBuilds() }
skipDefaultCheckout:跳过默认设置的代码 check out。例如:options
{ skipDefaultCheckout() }
skipStagesAfterUnstable:一旦构建状态进入了“Unstable”状态,就跳过此 stage。例如:options { skipStagesAfterUnstable() }
timeout:设置 Pipeline 运行的超时时间,超过超时时间,job 会自动被终止,例如:options { timeout(time: 1, unit: 'HOURS') }
retry:失败后,重试整个 Pipeline 的次数。例如:options { retry(3) }
timestamps:预定义由 Pipeline 生成的所有控制台输出时间。例如:options { timestamps() }
5. parameters
parameters 指令提供用户在触发 Pipeline 时的参数列表。这些参数值通过该 params 对象可用于 Pipeline stage 中,具体用法如下:
- 作用域:被最外层 pipeline 所包裹,并且只能出现一次,参数可被全局使用
- 好处:使用 parameters 好处是能够使参数也变成 code,达到 pipeline as code,pipeline 中设置的参数会自动在 job 构建的时候生成,形成参数化构建
# key:value的形式,当我们构建项目的时候,可以直接在web界面输入框输入对应key对应的value值,这个key在Pipelibe中就可以直接使用
string
A parameter of a string type, for example: parameters { string(name:'DEPLOY_ENV', defaultValue: 'staging', description: '') }
# 单选框的形式出现
booleanParam
A boolean parameter, for example: parameters { booleanParam(name:'DEBUG_BUILD', defaultValue: true, description: '') }
# 目前只支持[booleanParam, choice, credentials, file, text, password, run, string]这几种参数类型,其他高级参数化类型还需等待社区支持。
6. triggers
triggers 指令定义了 Pipeline 自动化触发的方式。目前有三个可用的触发器:cron 和 pollSCM 和 upstream。
cron
接受一个 cron 风格的字符串来定义 Pipeline 触发的时间间隔,例如:triggers { cron('H 4/* 0 0 1-5') }
pollSCM
接受一个 cron 风格的字符串来定义 Jenkins 检查 SCM 源更改的常规间隔。如果存在新的更改,则Pipeline 将被重新触发。例如:triggers { pollSCM('H 4/* 0 0 1-5') }
7. tools
Supported Tools(Global Tool Configuration)
maven
jdk
gradle
pipeline {
agent any
tools {
#工具名称必须在 Jenkins 管理 Jenkins → 全局工具配置中预配置。
maven 'apache-maven-3.0.1'
}
stages {
stage('Example') {
steps {
sh 'mvn --version'
}
}
}
}
说白了就是可以在pipeline中使用全局工具配置中配置好的工具
8. when
when 指令允许 Pipeline 根据给定的条件确定是否执行该阶段。该 when 指令必须至少包含一个条件。如果 when 指令包含多个条件,则所有子条件必须为 stage 执行返回 true。这与子条件嵌套在一个 allOf 条件中相同(见下面的例子)。更复杂的条件结构可使用嵌套条件建:not,allOf 或 anyOf。嵌套条件可以嵌套到任意深度
内置条件
branch
当正在构建的分支与给出的分支模式匹配时执行,例如:when { branch 'master' }。请注意,这仅适用于多分支 Pipeline。
environment
当指定的环境变量设置为给定值时执行,例如: when { environment name: 'DEPLOY_TO',value: 'production' }
expression
当指定的 Groovy 表达式求值为 true 时执行,例如: when { expression { returnparams.DEBUG_BUILD } }
not
当嵌套条件为 false 时执行。必须包含一个条件。例如:when { not { branch 'master' } }
allOf
当所有嵌套条件都为真时执行。必须至少包含一个条件。例如:when { allOf { branch'master'; environment name: 'DEPLOY_TO', value: 'production' } }
anyOf
当至少一个嵌套条件为真时执行。必须至少包含一个条件。例如:when { anyOf { branch'master'; branch 'staging' } }