如何使用表述性Pipeline
Jenkins提供了两种开发pipeline代码的方法,脚本化的和表述性的。
脚本化pipeline也就是我们传说中的传统pipeline,支持Groovy语法。
表述性pipeline提供了更简单的更友好的语法,提供了更多表述性的语法,用户不一定非要去学习和写Groovy。
Jenkins pipeline plugin version 2.5及以上版本开始支持表述性pipeline。
本文,将介绍在表述性pipeline中所有指令。
表述性pipeline的语法
一个合法的表述性pipeline必须定义一个pipeline语句,并且包含以下所需要的部分:
agent
stages
stage
steps
以及如下可选用的指令:
environment(stage/pipeline级别)
input(stage级)
options(stage/pipeline级别)
parallel
parameters
post
script
tools
triggers
when
指令详解
让我们来看一下列举指令使用的例子。
agent
pipeline {agent any--- }
stages
pipeline {agent anystages {...} }
stage
pipeline {agent anystages {stage ('build') {...}stage ('test: integration-&-quality') {...}stage ('test: functional') {...}stage ('test: load-&-security') {...}stage ('approval') {...}stage ('deploy:prod') {...}} }
steps
steps必须用在stage级别
steps { sh 'echo "A one line step"' sh ''' echo "A multiline step"' cd /tests/results ls -lrt ''' }
Environment
Enviroment必须用在pipeline或者stage级别
pipeline {agent anyenvironment {OUTPUT_PATH = './outputs/'}stages {stage ('build') {...}...} }
或者
pipeline {agent anystages {stage ('build') { environment {OUTPUT_PATH = './outputs/'}...}...} }
input
input指令定义在stage级别,提供发起输入的功能。这个stage会暂停,直到用户手动输入并确认 The "input" directive is defined at a stage level and provides the functionality to prompt for an input. The stage will be paused until a user manually confirms it.
pipeline {agent anystages {stage ('build') { input{message "Press Ok to continue"submitter "user1,user2"parameters {string(name:'username', defaultValue: 'user', description: 'Username of the user pressing Ok')}}steps { echo "User: ${username} said Ok."}}}}
Options
定义在pipeline级别,该指令会将某些指令为该pipeline进行分组。 可用的选项有:
- buildDiscarder
- disableConcurrentBuilds
- overrideIndexTriggers
- skipDefaultCheckout
- skipStagesAfterUnstable
- checkoutToSubdirectory
- newContainerPerStage
- timeout
- retry
- timestamps
例如,在pipeline失败之前,重新执行三次
pipeline { agent any options {retry(3) } stages {--- } }
Parallel
以下脚本会在在不同操作系统上,执行不同的测试。我们还可以在同一个Node上同时执行不同的stages。 但是,当我们使用并发stages,我们需要满足以下限制:
- stage指令可以含有parallel或者steps,但是不能同时两个都有。
- 在parallel内部定义的stage不能再定义parallel,只能定义steps.
- stage指令可以含有parallel指令,但不能同时在使用agent或着tools指令-
pipeline {agent nonestages {stage('Run Tests') {parallel {stage('Test On Windows') {agent { label "windows" }steps {bat "run-tests.bat"}}stage('Test On Linux') {agent { label "linux" }steps {sh "run-tests.sh"}}}}}}
Parameters
Pamaters指令支持我们定义一组在脚本中使用的参数。Parameters应在Pipeline在触发时被提供。其应该在'pipeline'级别定义,且一个pipeline只允许一个paramters指令。 字符串和布尔变量是可用的变量类型。
pipeline {agent anyparameters {string(name: 'user', defaultValue: 'John', description: 'A user that triggers the pipeline')}stages {stage('Trigger pipeline') {steps {echo "Pipeline triggered by ${params.USER}"}}}
}
Post
Post可用在pipeline或者stage级别,当pipeline或者stage完成后,这一部分会根据条件判断是否执行。 这些条件如下:
- always: 无论成败,都会执行
- changed: 只有该次和上次执行结果不同时,才会执行
- fixed: 只有上次失败,这次成功,才会执行
- regression: 只有上次成功,这次失败,被取消或者不稳定才会执行
- aborted: 被取消时,才会执行
- failure: 失败时,才会执行
- success: 成功时,才会执行
- unstable: 不稳定,才会执行
由于在pos块中的句子总会在最后执行,所以,清理工作,通知工作等通常定义在此。
pipeline {agent anystages {stage('Some steps') {steps {...}}}post {always {echo “Pipeline finished”bat ./performCleanUp.bat}} }
Script
要用在stage级别。这些语法块允许我们扩展Jenkins功能并作为共享lib分享。
pipeline {agent anystages {stage('Sample') {steps {echo "Scripted block"script {}}}}}
Tools
要用在pipeline或者stage级别,用来指定哪个maven, jdk或者gradle版本。
pipeline {agent anytools {maven 'apache-maven-3.0.1' }stages {...} }
Triggers
Triggers允许Jenkins通过以下配置自动触发pipelines:
- cron: 定义pipeline定时触发
- pollSCM: 当定义cron时,允许Jenkins检测仓库源的更新。如果有更新,则触发pipeline
- upstream: 将一组Jenkins jobs的列表作为输入阈值,当列表中任一个任务执行结束后,该pipeline会被触发。
pipeline {agent anytriggers {//Execute weekdays every four hours starting at minute 0cron('0 */4 * * 1-5')}stages {...} }
或者
pipeline {agent anytriggers {//Query repository weekdays every four hours starting at minute 0pollSCM('0 */4 * * 1-5')}stages {...} }
或者
pipeline {agent anytriggers {//Execute when either job1 or job2 are successfulupstream(upstreamProjects: 'job1, job2', threshold: hudson.model.Result.SUCCESS)}stages {...} }
- When
在stage级别使用。如果满足when则steps执行,如果不满足,steps则不执行。例如,pipeline允许在一个project中多个branch,即multibranched pipeline。则根据不同的branch,可执行不同的操作,如下:
pipeline {agent anagent anystages {stage ('Deploy stage') {when {branch 'master'}steps {echo 'Deploy master to stage'...}}} }
注意事项
- 表述性pipeline如果存在语法错误,一旦触发,就会立即报错。
- Pipeline支持表述性的指令也支持脚本。表述性指令内部嵌套脚本步骤是种不错的事件。
- 在CI/CD环境中,Jenkins pipeline有广泛的应用场景
英语原文为:https://www.blazemeter.com/blog/how-to-use-the-jenkins-declarative-pipeline
如何使用表述性Pipeline相关推荐
- Restful 表述性状态传递
Restful REST表述性状态传递 REST通常基于使用HTTP,URL,XML,HTML. REST使用的数据格式为JSON HTTP方法 GET 获取数据 PUT 用于更新和添加数据 DELE ...
- REST - 表述性状态转移
表述性状态转移(REST - Representional State Transfer) The Representational State Transfer (REST) style is an ...
- 微服务——REST(Representational State Transfer,表述性状态转移)
面试造飞机系列:看架构师如何设计微服务接口 REST(Representational State Transfer,表述性状态转移) 是一种软件架构风格.REST提出了一组架构约束条件和原则,任何满 ...
- REST(Representational State Transfer):表述性状态转移
REST(Representational State Transfer):表述性状态转移概念:REST是一种跨平台.跨语言的架构风格.1)在REST架构风格中,对象被抽象为一种资源,表述性状态是指( ...
- REST(Representational State Transfer表述性状态转移)
http://zh.wikipedia.org/zh-cn/REST REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降 ...
- REST表述性状态传递
REST定义了一组体系架构原则,近年来已经成为最主要的Web服务设计模式. 1.链接原则:任何可能的情况下,使用链接指引可以被标识的事物(资源). 2.统一接口原则:通用标准方法使得所有理解HTTP应 ...
- Jenkins Pipeline 语法
目录 声明性pipeline Sections agent pipeline与stage中的不同 参数 常用选项 发布 post stages steps Directives environment ...
- Python面试题解析之前端、框架和其他
python面试题解析(前端.框架和其他) 答: HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善 ...
- python面试题解析(前端、框架和其他)
答: HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
最新文章
- 机器学习算法基础知识
- Tensorflow:如何保存/恢复模型?
- 演示:通过实验取证IP报文的各个字段
- 弹出窗口, 不显示工具栏等。
- Windows 环境下 Chrome浏览器崩溃“STATUS_INVALID_IMAGE_HASH”
- Intel 64/x86_64/IA-32/x86处理器 - 锁原子操作(1) - 处理器保证的原子操作
- 公用表表达式(CTE)
- JavaScript学习(四十)—字面量创建对象图解
- 《Algorithms》Comparable 实现插入排序
- 表达式必须是常量表达式
- LIVE555play流程
- SHA256算法详解及python实现
- 三星a5000刷Android原生,三星 A5000中文Recovery刷机教程
- CSDN博客专家申请的条件及规则
- 【OpenGL】笔记六、GLM配置
- 抖音、吃鸡、王者荣耀:你的自律,是如何被顶级产品经理一步一步毁掉的
- Android保存图片到系统图库并通知系统相册刷新
- 关于小米安装app的问题
- 定制linux版本,定制属于自己的Linux操作系统
- solidworks导出obj模型和mtl材质