label:选择特定标签的Jenkins节点作为构建环境。
pipeline {
agent { label 'my-defined-label' }
}
node:node用法与label用法一样,但是node有额外的可选参数customWorkspace,可以指定工作空间。
pipeline {
agent {
node {
label 'my-defined-label'
customWorkspace '/some/other/path'
}
}
}
post
post 部分定义一个或多个steps ,post里面的steps将根据流水线或阶段的返回结果来判断是否执行。
参数:
always:无论流水线或阶段的返回结果如何,都将执行该steps。
changed:只有当前流水线或阶段的完成状态与它之前的运行不同时,才执行该steps。
failure:只有当前流水线或阶段的返回值为非0时,才执行该steps。
success:只有当前流水线或阶段的返回值为0时,才执行该steps。
unstable:只有当前流水线或阶段的状态为"unstable",才允许在 post 部分运行该步骤, 通常由于测试失败,代码违规等造成。
aborted:只有当前流水线或阶段的状态为"aborted",才执行该steps,aborted通常为手动取消构建时的状态。
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
post {
always {
echo 'I will always say Hello again!'
}
}
}
environment
以键值对的方式添加环境变量,可以是添加全局环境变量,也可以是在某个stage中添加环境变量,stage中添加的环境变量只作用于当前stage。
pipeline {
agent any
environment {
CC = 'clang'
}
stages {
stage('Example') {
environment {
AN_ACCESS_KEY = credentials('my-prefined-secret-text')
}
steps {
sh 'printenv'
}
}
}
}
options
options配置流水线的构建配置,类似于自由构建的丢弃旧的构建,是否允许并行构建等等。也可以由插件提供参数,比如timestamps(在控制台输出时间)
buildDiscarder:保留最近的构建次数。
options { buildDiscarder(logRotator(numToKeepStr: '1')) }
disableConcurrentBuilds:不允许同时执行流水线,可被用来防止同时访问共享资源等.
options { disableConcurrentBuilds() }
skipDefaultCheckout:跳过在版本控制器中检出代码。
options { skipDefaultCheckout() }
skipStagesAfterUnstable:当构建状态为UNSTABLE时,跳过该阶段。
options { skipStagesAfterUnstable() }
checkoutToSubdirectory:在工作空间的子目录中自动执行源代码控制检出。
options { checkoutToSubdirectory('foo') }
timeout:设置流水线运行的超时时间, 若在此时间内任务未执行完,则自行停止构建。
options { timeout(time: 1, unit: 'HOURS') }
retry:在失败时, 重新尝试整个流水线的指定次数。
options { retry(3) }
timestamps:在控制台输出时间戳。
options { timestamps() }
个别任务可以单独指定更长的超时时间如下3分钟拉取代码超时
git 'https://gitee.com/oftware/api.git'
timeout ("${env.TIMEOUT?:3}")
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
buildDiscarder(logRotator(numToKeepStr: '1'))
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
参数
parameters 指令提供了一个用户在触发流水线时应该提供的参数列表。这些用户指定参数的值可通过 params 对象提供给流水线步骤。
string:字符串类型的参数。
parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }
booleanParam:布尔参数
parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }
pipeline {
agent any
parameters {
string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
}
stages {
stage('Example') {
steps {
echo "Hello ${params.PERSON}"
}
}
}
}
触发器
triggers 指令定义了流水线被重新触发的自动化方法。对于集成了源( 比如 GitHub 或 BitBucket)的流水线, 可能不需要 triggers ,因为基于 web 的集成很肯能已经存在。 当前可用的触发器是 cron, pollSCM 和 upstream。
cron:接收 cron 样式的字符串来定义要重新触发流水线的常规间隔。
triggers { cron('H */4 * * 1-5') }
pollSCM:接收 cron 样式的字符串来定义一个固定的间隔,在这个间隔中,Jenkins 会检查新的源代码更新。如果存在更改, 流水线就会被重新触发。
triggers { pollSCM('H */4 * * 1-5') }
upstream:接受逗号分隔的工作字符串和阈值。 当字符串中的任何作业以最小阈值结束时,流水线被重新触发。
triggers { upstream(upstreamProjects: 'job1,job2', threshold: hudson.model.Result.SUCCESS) }
pipeline {
agent any
triggers {
cron('H */4 * * 1-5')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
工具
定义使用工具的名称,该工具需在系统设置中进行设置。当前支持maven、jdk、gradle
pipeline {
agent any
tools {
maven 'apache-maven-3.0.1'
}
stages {
stage('Example') {
steps {
sh 'mvn --version'
}
}
}
}
script
script块,script块使用groovy语法,提供更加了灵活的用法。
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
script {
def browsers = ['chrome', 'firefox']
for (int i = 0; i < browsers.size(); ++i) {
echo "Testing the ${browsers[i]} browser"
}
}
}
}
}
}
参考链接
https://www.jenkins.io/zh/doc/book/pipeline/syntax/