前言:
pipeline语法分类一般来说,有四种。分别是环境配置、阶段步骤、行为动作、逻辑判断。
一、环境配置
(1)agent:
运行代理,指当前的逻辑程序需要什么环境才能运行。可以放在顶层pipeline块和每个stage块中。
- any:当前逻辑程序可以在任何环境运行
- none:不配置任何环境运行,在块的顶层应用时,pipeline不会为整个 Pipeline 运行分配全局代理,并且每个stage部分都需要包含自己的agent部分。
- label:在 Jenkins 环境中使用提供的标签的可用代理上执行流水线或阶段。
例如:
agent { label 'my-defined-label' }
也可以使用标签条件。
例如:
agent { label 'my-label1 && my-label2' }
或
agent { label 'my-label1 || my-label2' }
- node:agent { node { label 'labelName' } }行为与 相同 agent { label 'labelName' },但node允许附加选项(例如customWorkspace)
- docker:可以配置一个docker容器来运行作为其运行环境。
agent {
docker { image 'maven:3.8.1-adoptopenjdk-11'}
}
- dockerfile:使用dockerfile文件来启动特定docker容器所创建的环境来运行。
- kubernetes:在 Kubernetes 集群上部署的 pod 内执行管道或阶段。
(2)environment
指定了一系列键值对。这些环境变量会在所有步骤中生效/特定步骤中生效,取决于你在哪里设置。
pipeline {
agent any
environment {
CC = 'suncat'
}
stages {
stage('SuncatExample') {
environment {
AN_ACCESS_KEY = credentials('my-predefined-secret-text')
}
steps {
sh 'printenv'
}
}
}
}
①第一个environment*块中使用的指令pipeline将应用于pipeline中的所有步骤。(CC = 'suncat'会在该pipeline所有位置均可用)
②第二个environment在名为“SuncatExample”的stage只会将给定的环境变量应用于stage.(AN_ACCESS_KEY = credentials('my-predefined-secret-text') 仅在SuncatExample阶段中可用)
③credentials(),可用于通过 Jenkins 环境中的标识符访问预定义的凭据。
(3)options
该options指令允许从流水线本身配置流水线特定的选项。简单来说就是配置该流水线的一些运行参数。
pipeline全局参数:
- buildDiscarder:为该pipeline最近运行保留日志和控制台输出的数量。
-
例如: options { buildDiscarder(logRotator(numToKeepStr: '1')) }
- checkoutToSubdirectory:在工作区的子目录中执行自动源代码控制检出
-
例如: options { checkoutToSubdirectory('foo') }
- disableConcurrentBuilds:禁止管道的并发执行。可用于防止同时访问共享资源等。
-
例如: options { disableConcurrentBuilds() }
- disableResume:如果控制器重新启动,则不允许该pipeline恢复。
-
例如: options { disableResume() }
- newContainerPerStage:与docker或dockerfile*代理一起使用。指定后,每个阶段将在同一节点上的新容器实例中运行,而不是所有阶段都在同一容器实例中运行
-
- preserveStashes:保留已完成构建的存储,以用于阶段重新启动。
-
例如: options { preserveStashes() }
保留最近完成的构建中的存储,或options { preserveStashes(buildCount: 5) }保留五个最近完成的构建中的存储。
- quietPeriod:设置该pipeline的静默期(以秒为单位),覆盖全局默认值
-
例如:options { quietPeriod(30) }
- retry:失败时,重试整个管道指定的次数。
-
例如:options { retry(3) }
- skipDefaultCheckout:agent默认情况下,在指令中跳过从源代码管理中检出代码。
-
例如:options { skipDefaultCheckout() }
- skipStagesAfterUnstable:一旦构建状态变为 UNSTABLE,就跳过阶段。
-
例如:options { skipStagesAfterUnstable() }
- timeout:为流水线运行设置一个超时时间,之后 Jenkins 应该中止流水线。
-
例子:options { timeout(time: 1, unit: 'HOURS') }
备注:指定一小时的全局执行超时,之后 Jenkins 将中止流水线运行。
pipeline { agent any options { timeout(time: 1, unit: 'HOURS') } stages { stage('Example') { steps { echo 'Hello World'} } } }
- timestamps:将 Pipeline 运行生成的所有控制台输出添加到发出该行的时间。
-
例如:options { timestamps() }
- parallelsAlwaysFailFast:为pipeline中的所有后续并行阶段设置 failfast true。
-
例如:options { parallelsAlwaysFailFast() }
阶段参数:
- skipDefaultCheckout:agent默认情况下,在指令中跳过从源代码管理中检出代码。
-
例子:options { skipDefaultCheckout() }
- timeout:为这个阶段设置一个超时时间,之后詹金斯应该中止这个阶段。
-
例子:options { timeout(time: 1, unit: 'HOURS') }
pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World'} } } }
- retry:失败时,重试此阶段指定的次数。
-
例子:options { retry(3) }
- timestamps:将在此阶段生成的所有控制台输出添加到发出该行的时间。
-
例子:options { timestamps() }
(4)parameter
就是普通的设置参数,可设置在pipeline全局或者某个阶段中,作用范围就会不一样。
- string:字符串类型的参数。
-
例如: parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }
- text:一个文本参数,可以包含多行。
-
例如: parameters { text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '') }
- booleanParam:一个布尔参数。
-
例如: parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }
- choice:一个选择参数。
-
例如: parameters { choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '') }
- password:一个密码参数。
-
例如: parameters { password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'A secret password') }
例子:
pipeline { agent any parameters { string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?') text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person') booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value') choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something') password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password') } stages { stage('Example') { steps { echo "Hello ${params.PERSON}" echo "Biography: ${params.BIOGRAPHY}" echo "Toggle: ${params.TOGGLE}" echo "Choice: ${params.CHOICE}" echo "Password: ${params.PASSWORD}"} } } }
(5)tools
定义用于自动安装和放置在PATH. 如果agent none指定,则忽略。例如自动安装maven、jdk、gradle等
例子:
pipeline {
agent any
tools {
maven 'apache-maven-3.0.1'}
stages {
stage('Example') {
steps {
sh 'mvn --version'}
}
}
}