Jenkins Pipeline 语法
Pipeline语法
先讲Declarative Pipeline
,所有声明式管道都必须包含在pipeline
块中:
1 |
pipeline { |
块里面的语句和表达式都是Groovy语法,遵循以下规则:
- 最顶层规定就是
pipeline { }
- 语句结束不需要分好,一行一条语句
- 块中只能包含
Sections
,Directives
,Steps
或者赋值语句 - 属性引用语句被当成是无参方法调用,比如
input
实际上就是方法input()
调用
接下来我详细讲解下Sections
, Directives
, Steps
这三个东西
Sections
Sections
在声明式管道中包含一个或多个Directives
, Steps
post
post
section 定义了管道执行结束后要进行的操作。支持在里面定义很多Conditions
块: always
,changed
, failure
, success
和 unstable
。 这些条件块会根据不同的返回结果来执行不同的逻辑。
- always:不管返回什么状态都会执行
- changed:如果当前管道返回值和上一次已经完成的管道返回值不同时候执行
- failure:当前管道返回状态值为”failed”时候执行,在Web UI界面上面是红色的标志
- success:当前管道返回状态值为”success”时候执行,在Web UI界面上面是绿色的标志
- unstable:当前管道返回状态值为”unstable”时候执行,通常因为测试失败,代码不合法引起的。在Web UI界面上面是黄色的标志
1 |
// Declarative // |
stages
由一个或多个stage
指令组成,stages块也是核心逻辑的部分。 我们建议对于每个独立的交付部分(比如Build
,Test
,Deploy
)都应该至少定义一个stage
指令。比如:
1 |
// Declarative // |
steps
在stage
中定义一系列的step
来执行命令。
1 |
// Declarative // |
Directives
jenkins中的各种指令
agent
agent
指令指定整个管道或某个特定的stage
的执行环境。它的参数可用使用:
- any - 任意一个可用的agent
- none - 如果放在pipeline顶层,那么每一个
stage
都需要定义自己的agent
指令 - label - 在jenkins环境中指定标签的agent上面执行,比如
agent { label 'my-defined-label' }
- node -
agent { node { label 'labelName' } }
和 label一样,但是可用定义更多可选项 - docker - 指定在docker容器中运行
- dockerfile - 使用源码根目录下面的
Dockerfile
构建容器来运行
environment
environment
定义键值对的环境变量
1 |
// Declarative // |
options
还能定义一些管道特定的选项,介绍几个常用的:
- skipDefaultCheckout - 在
agent
指令中忽略源码checkout
这一步骤。 - timeout - 超时设置
options { timeout(time: 1, unit: 'HOURS') }
- retry - 直到成功的重试次数
options { retry(3) }
- timestamps - 控制台输出前面加时间戳
options { timestamps() }
parameters
参数指令,触发这个管道需要用户指定的参数,然后在step
中通过params
对象访问这些参数。
1 |
// Declarative // |
triggers
触发器指令定义了这个管道何时该执行,一般我们会将管道和GitHub、GitLab、BitBucket关联, 然后使用它们的webhooks来触发,就不需要这个指令了。如果不适用webhooks
,就可以定义两种cron
和pollSCM
- cron - linux的cron格式
triggers { cron('H 4/* 0 0 1-5') }
- pollSCM - jenkins的
poll scm
语法,比如triggers { pollSCM('H 4/* 0 0 1-5') }
1 |
// Declarative // |
stage
stage
指令定义在stages
块中,里面必须至少包含一个steps
指令,一个可选的agent
指令,以及其他stage相关指令。
1 |
// Declarative // |
tools
定义自动安装并自动放入PATH
里面的工具集合
1 |
// Declarative // |
注:① 工具名称必须预先在Jenkins中配置好了 → Global Tool Configuration.
内置条件
- branch - 分支匹配才执行
when { branch 'master' }
- environment - 环境变量匹配才执行
when { environment name: 'DEPLOY_TO', value: 'production' }
- expression - groovy表达式为真才执行
expression { return params.DEBUG_BUILD } }
1 |
// Declarative // |
Steps
这里就是实实在在的执行步骤了,每个步骤step都具体干些什么东西, 前面的Sections
、Directives
算控制逻辑和环境准备,这里的就是真实执行步骤。
这部分内容最多不可能全部讲完,官方Step指南 包含所有的东西。
Declared Pipeline
和Scripted Pipeline
都能使用这些step,除了下面这个特殊的script
。
一个特殊的step就是script
,它可以让你在声明管道中执行脚本,使用groovy语法,这个非常有用:
1 |
// Declarative // |
最后列出来一个典型的Scripted Pipeline
:
1 |
node('master') { |
可以看到,Scripted Pipeline
没那么多东西,就是定义一个node
, 里面多个stage
,里面就是使用Groovy语法执行各个step
了,非常简单和清晰,也非常灵活。
两种Pipeline比较
Declarative Pipeline
相对简单,而且不需要学习groovy语法,对于日常的一般任务完全够用, 而Scripted Pipeline
可通过Groovy语言的强大特性做任何你想做的事情。
转自:https://www.xncoding.com/2017/03/22/fullstack/jenkins02.html
Jenkins Pipeline 语法的更多相关文章
- Jenkins pipeline 语法详解
原文地址http://www.cnblogs.com/fengjian2016/p/8227532.html pipeline 是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节 ...
- jenkins pipeline语法
目录 一.声明式 二.脚本式 基本 判断 异常处理 Steps node withEnv 一.声明式 声明式Pipeline必须包含在名为pipeline的语句块中,典型的声明式Pipeline语法如 ...
- 【原】Jenkins pipeline中资料总结
docker-compose 快速部署持续集成测试环境 Gitlab+Harbor+Jenkins pipeline 实现 tag run docker Images https://www.cnbl ...
- Jenkins pipeline:pipeline 使用之语法详解
一.引言 Jenkins 2.0的到来,pipline进入了视野,jenkins2.0的核心特性. 也是最适合持续交付的feature. 简单的来说,就是把Jenkins1.0版本中,Project中 ...
- Jenkins pipeline:pipeline 语法详解
jenkins pipeline 总体介绍 pipeline 是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化. ...
- 转~Jenkins pipeline:pipeline 使用之语法详解
一.引言 Jenkins 2.0的到来,pipline进入了视野,jenkins2.0的核心特性. 也是最适合持续交付的feature. 简单的来说,就是把Jenkins1.0版本中,Project中 ...
- Jenkins系列之pipeline语法介绍与案例
Jenkins Pipeline 的核心概念: Pipeline 是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化. ...
- 7.Jenkins进阶之流水线pipeline语法入门学习(2)
目录一览: (2) Declarative Pipeline Syntax 2.1) Sections - 章节 2.2) Directives - 指令 2.3) Sequential Stages ...
- 6.Jenkins进阶之流水线pipeline语法入门学习(1)
目录一览: 0x00 前言简述 Pipeline 介绍 Pipeline 基础知识 Pipeline 扩展共享库 BlueOcean 介绍 0x01 Pipeline Syntax (0) Groov ...
随机推荐
- Codeforces Round #593 (Div. 2) D. Alice and the Doll
题目:http://codeforces.com/problemset/problem/1236/D思路:机器人只能按照→↓←↑这个规律移动,所以在当前方向能够前进的最远处即为界限,到达最远处右转,并 ...
- 高性能mysql 第10章 复制
复制功能不仅能够构建高可用的应用,同时也是高可用性,可扩展性,灾难恢复,备份以及数据仓库等工作的基础. mysql支持两种复制方式:基于语句的复制和基于行的复制.基于语句的复制(也成为逻辑复制)是早期 ...
- params修饰符的用法
params修饰符是用来声明参数数组允许向方法传递数量不定的自变量用的.事实上System.Console 类的 Write 和 WriteLine 方法是参数数组用法的典型示例.他们的声明方式如下: ...
- C# WCF发布服务的元数据的方式
发布服务元数据的方式有两种:一是基于HTTP-GET协议提供元数据,它是一种绝大多数平台都能支持的简单text-based协议:另一种是元数据交换终结点. 1.基于HTTP-GET协议 <?xm ...
- yum 安装 mongodb
1 .添加阿里源 vi /etc/yum.repos.d/mongodb.repo [mongodb-org] name=MongoDB Repository baseurl=http://mirro ...
- PHP教程-反序列化的方法
序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性.兄弟连PHP培训() 1. ...
- poj 2761 主席树的应用(查询区间第k小值)
Feed the dogs Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 22084 Accepted: 7033 De ...
- ZeroMQ+QT 字符串收发
结合 Zeromq API函数 与 Qt 字符串QString QByteArray 实现字串收发: 发送端: zmq_msg_t msg; QString strT = “ABC汉字123”: QB ...
- Linux压缩工具
一.gzip/gunzip/zcat gzip, gunzip, zcat - compress or expand files gzip [ option .... ] [ filenames .. ...
- 利用freemarker生成word,word另存为xml文件的标签解析
http://wenku.baidu.com/link?url=YxTZWVP3ssO-e_Br3LIZVq2xOQnqaSz8gLPiRUDN8NIR_wX2-Z25OqwbVn5kXqGiOFYU ...