目录
一、为什么使用pipeline
我之前实现了一套完整的升级自动化构建流程,每个步骤分别对应一个Job(为了各Job之间能够方便的自由组合)。现在想根据不同的测试场景,将多个Job串联起来,准备用pipeline实现。
二、常用的指令
agent
指定一个Jenkins节点来运行我的pipeline。
pipeline {
agent{
label "192.168.210.62"
}
}
stages
这个部分允许在流水线上生成不同的阶段,这些阶段将在运行任务时显示为不同的段。
pipeline {
agent any
stages {
...
}
}
stage
必须在“stages”部分上定义至少一个“stage”部分。一个Pipeline有多个Stage组成,每个Stage包含一组Step。一个Stage可以跨多个Node执行,即Stage实际上是Step的逻辑分组。
pipeline {
stages {
stage ('aaa') {
...
}
stage ('bbb') {
...
}
stage ('ccc') {
...
}
stage ('ddd') {
...
}
stage ('eee') {
...
}
stage ('fff') {
...
}
}
}
steps
“steps”被定义为在“stage”内。 在“steps”部分中必须至少定义一个步骤。
steps {
sh 'echo "A one line step"'
echo "A multiline step"'
}
parameters
该指令允许您定义脚本中要使用的参数列表。一旦触发流水线,应提供参数。应该在“pipeline”级别定义它,并且整个流水线只允许一个指令。
有效参数类型有:
布尔值参数 | booleanParam | parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') } |
选项参数 | choice | parameters { choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '') } |
凭据参数 | credentials | |
文件参数 | file | parameters { file(name: 'FILE', file: 'abc' } 备注:直接使用Jenkins Pipeline的File parameter,无法将文件上传到当前job的workspace下 |
密码参数 | password | parameters { password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'A secret password') } |
运行时参数 | run | |
字符参数 | string | parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') } |
文本参数 | text | parameters { text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '') } |
pipeline {
parameters {
string(name: 'user', defaultValue: 'wxt_hillwill', description: 'beautiful girl')
}
}
script
此步骤用于将脚本化流水线语句添加到声明式流水线中,从而提供更多功能。此步骤必须包括在“stage”级别。
pipeline {
agent any
stages {
stage('showme') {
steps {
echo "beautiful girl"
script {
…
}
}
}
}
}
三、不太常用的指令
environment
定义环境变量
input
input指令在阶段级别定义,提供提示输入的功能。该阶段将被暂停,直到用户手动确认为止。
以下配置选项可用于此指令:
- message:这是必需的选项,其中指定了要显示给用户的消息。
- id:可选标识符。 默认情况下,使用“阶段”名称。
- ok:“确定”按钮的可选文本。
- submitter:允许提交输入的用户或外部组名的可选列表。 默认情况下,允许任何用户。
- submitterParameter:要使用提交者名称设置的环境变量的可选名称(如果存在)。
- parameters:提交者将提供的可选参数列表。
post
可以在流水线级别或每个阶段上添加 post,一旦阶段或流水线完成,便会执行其中包含的语句。可以使用几个 post 条件来控制是否执行该 post:
- always:无论完成状态如何,都会执行步骤。
- changed:仅当完成结果与上次运行的状态不同时才执行。
- fixed:仅在完成结果是成功且上次运行失败时执行
- regression:仅在当前执行失败,中止或不稳定并且上一次运行成功时执行。
- aborted:仅在流水线或阶段中止时才执行步骤。
- failure:仅在流水线或阶段失败时才执行步骤。
- success:仅在流水线或阶段成功时才执行步骤。
- unstable:仅当流水线或阶段不稳定时才执行步骤。
tools
可以在流水线级别或阶段级别添加“tools”指令。 它允许您指定要在脚本上使用的 Maven,JDK 或 Gradle 版本。 必须在“全局工具配置” Jenkins 菜单上配置这些工具中的任何一个,在撰写本文时,这三个工具都受支持。
triggers
触发器允许 Jenkins 通过使用以下任何一个可用的方式自动触发流水线:
- cron:通过使用 cron 语法,它可以定义何时重新触发流水线。
- pollSCM:通过使用 cron 语法,它允许您定义 Jenkins 何时检查新的源存储库更新。如果检测到更改,则将重新触发流水线。(从 Jenkins 2.22 开始可用)。
- upstream:将 Jenkins 任务和阈值条件作为输入。 当列表中的任何任务符合阈值条件时,将触发流水线。
when
可以根据“when”指令中定义的条件执行流水线步骤。如果条件匹配,将运行相应阶段中定义的步骤。它应该在阶段级别定义。