Pipeline
Pipeline 简而言之,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化
基本概念
node
关键字node就是用来区分,Jenkins环境中不同的节点环境。例如一个Jenkins环境包括master节点,也就是主节点,还包括N多个从节点,这些从节点在添加到主节点的向导页面中有一个参数,好像是label,就是给这个从节点取一个名称。在Pipeline代码中可以通过node这个关键字告诉Jenkins去用哪一台节点机器去执行代码。
stage
关键字stage,就是一段代码块,一般个stage包含一个业务场景的自动化,例如build是一个stage, test是第二个stage,deploy是第三个stage。通过stage隔离,让Pipeline代码读写非常直观。到后面你还会学习stages这个关键字,一个stages包含多个stage。
step
关键字step就是一个简单步骤,一般就是几行代码或者调用外部一个模块类的具体功能。这里step是写在stage的大括号里的。
agent
agent部分主要作用就是告诉Jenkins,选择那台节点机器去执行Pipeline代码
各种可选参数的意思
- any:在任何可用的代理上执行Pipeline或stage。
- none:当在pipeline块的顶层应用时,将不会为整个Pipeline运行分配全局代理,并且每个stage部分将需要包含其自己的agent部分。
- label:使用提供的标签在Jenkins环境中指定的代理机器上执行Pipeline或stage内执行。
pipeline {
agent {
label ‘具体一个节点label名称’
}
}
post
post部分定义将在Pipeline运行或阶段结束时运行的操作。一些条件后 的块的内支持post:部分 always,changed,failure,success,unstable,和aborted。这些块允许在Pipeline运行或阶段结束时执行步骤,具体取决于Pipeline的状态。简单来说,post可以放在顶层,也就是和agent{…}同级,也可以放在stage里面
基本的代码格式
pipeline {
agent any
stages {
stage (‘Test’) {
}
}
post {
always { // 总是执行
script {
// 代码
}
}
failure { // 失败
script {
// 代码
}
}
success { // 成功
script {
// 代码
}
}
changed { // 与上一次的结果不一致
script {
// 代码
}
}
}
}
environment
该environment指令指定一系列键值对,这些对值将被定义为所有步骤的环境变量或阶段特定步骤,具体取决于environment指令位于Pipeline中的位置。
input
该input指令允许在一个stage{…}显示提示输入等待。在inpt{…}写一些条件,然后用户触发构建这个job,但是这个时候没有接收到有效的input, job会一直在等待中,你可以在例如job #1的output console中,点击这个input条件,提供input,构建才会继续。
各种可选参数
- message:这个是必须的,这个message会在用户提交构建的页面显示,提示用户提交相关的input条件。
- id:可选,可以作为这个input的标记符,默认的标记符是这个stage的名称。
- ok:可选, 主要是在ok按钮上显示一些文本,在input表单里。
- submitter:可选,里面可以写多个用户名称或者组名称,用逗号隔开。意思就是,只有这写名称的对应用户登陆jenkins,才能提交这个input动作,如果不写,默认是任何人都可以提交input。
- parameters:这是一个可选, 和我们前面学的parameters没有区别,就是定义一些参数的地方。
pipeline {
agent any
stages {
stage('Example') {
input {
message "Should we continue?"
ok "Yes, we should."
submitter "admin"
parameters {
string(name: 'PERSON', defaultValue: 'Mr Anthony', description: 'Who should I say hello to?')
}
}
steps {
echo "Hello, ${PERSON}, nice to meet you."
}
}
}