Jenkins扩展篇-流水线脚本语法

JenkinsFile可以通过两种语法来声明流水线结构,一种是声明式语法,另一种是脚本式语法。

脚本式语法以Groovy语言为基础,语法结构同Groovy相同。

由于Groovy学习不适合所有初学者,所以Jenkins团队为编写Jenkins流水线提供一种更简单、更有主见的语法-声明式。

两者本质上是相同的流水线子系统。即他们都是 “流水线即代码” 的持久实现,都能够使用构建到流水线中或插件提供的步骤,都能够使用 共享库

但是它们的区别在于语法和灵活性。声明式限制了用户使用更严格和预定义的结构, 但是略显繁琐。脚本化提供了很少的限制, 以至于对脚本和语法的唯一限制往往是由Groovy子集本身定义的,而不是任何特定于流水线的系统, 这也使得脚本式语法成为高级用户和那些有更复杂需求的人的理想选择。

脚本式语法

流水线脚本结构

node{
stage('Build'){
checkout scm
echo 'start build'
}
stage('Test'){
echo 'start test'
}
stage('Deploy'){
echo 'start deploy'
}
}

Node(节点): 一个 Node 就是一个 Jenkins 节点,或者是 Master,或者是 Agent,是执行 Step 的具体运行环境,Pipeline 执行中的大部分工作都是在一个或多个声明 Node 步骤的上下文中完成的。如果不指定参数,则默认在master节点运行job

Stage(环节): 一个 Pipeline 可以从逻辑上划分为若干个 Stage,每个 Stage 代表一组操作,如:Build、Test、Deploy。注意,Stage 是一个逻辑分组的概念,可以跨多个 Node。即,一个stage语句块可以包含node,表示不同的节点执行响应的任务步骤。

Step(步骤): Step 是最基本的操作单元,小到执行一个 Shell 脚本,大到构建一个 Docker 镜像,由各类 Jenkins 插件提供,当插件扩展Pipeline DSL 时,通常意味着插件已经实现了一个新的步骤。

另外在 Jenkins Pipeline 中定义的 Stage(各个阶段的逻辑划分),Jenkins 提供了 Stage View 插件,按照 Stage 逻辑划分任务,对用户透明化、可视化展示流水线的执行,如下图:

图片

基本语法

脚本式语法遵从Groovy脚本语言设计,常见的Groovy语法都可以用到流水线脚本中

内置函数

有很多特殊的Step用于pipeline脚本中,如前面提到的node或stage。下面列出一些在你当前插件集合中所有可以用到的step。其他插件提供的pipeline集成功能可以通过更新插件做到。

通常Step 的参数是以键值对形式传递的,但是如果此步骤只有一个必填参数,那么可以省略参数名,如:

readFile 'build.properties'

是下面这种方式的简写

readFile file: 'build.properties'

但是如果有多个必填参数,那么参数名必须指定:

readFile file: 'build.properties', encoding: 'ISO-8859-1'

参数直接用逗号隔开

许多步骤的参数会用到复杂的嵌套配置(一些嵌套配置对象反过来有对象类型的参数),下面列出三种方式指定嵌套对象,按照优先级排列。

1.一些配置对象定义自定义符号。这些用于表示步进调用的符号,或者使用命名参数映射的其他函数调用:

splitTests count(3)

或拼出强制性参数名称:

splitTests parallelism: count(size: 3)

与使用旧的第二语法选项的等效项比较:

splitTests parallelism: [$class: 'CountDrivenParallelism', size: 3]

委托给单个对象的某些Pipeline步骤允许在明确的情况下省略实际的步骤名称,因此您可以简单地编写:

archiveArtifacts '**.txt'

而不是:

step([$class: 'ArtifactArchiver', artifacts: '**.txt'])

嵌套配置是一个实际值,可以保存到变量等中:

def parallelism(deterministic) {
deterministic ? count(3) : time(15)
}
splitTests parallelism(true)

2.使用参数的键值对。可以省略默认值。(注意,这[1, 2, 3]是Groovy中的列表,而是[a: 1, b: 2, c: 3]字典。)

特殊映射键 c l a s s 用于表示所请求对象的简单或(必要时)完全限定类名。如果包含的参数只允许一种嵌套对象(或列表),则 class用于表示所请求对象的简单或(必要时)完全限定类名。如果包含的参数只允许一种嵌套对象(或列表),则 class用于表示所请求对象的简单或(必要时)完全限定类名。如果包含的参数只允许一种嵌套对象(或列表),则class可以省略:

checkout([$class: 'GitSCM', userRemoteConfigs: [[url: 'git://…'], extensions: [[$class: 'CleanBeforeCheckout']]])

在这个例子中,GitSCM必须指定来区分的种类SCM所使用的delegate的checkout (单强制参数名称delegate可省略);

并且CleanBeforeCheckout必须被指定来区分不同类别的GitSCMExtension由所使用extensions的GitSCM-a“异质”列表;

但$class: 'UserRemoteConfig’由于可以省略userRemoteConfigs的GitSCM被定义为只包含UserRemoteConfigS-它是一个“均匀的”列表。(在第一种语法中,同类列表不允许有这样的遗漏。)

请注意,如果给出单个参数,省略名称,并且该参数是映射,则必须将其括在括号中以避免语法歧义。

3使用Java对象:

import hudson.plugins.git。*
import hudson.plugins.git.extensions.impl。*
checkout(new GitSCM([new UserRemoteConfig('git:// ...',null,null,null)],null,false,[],null,null,[new CleanBeforeCheckout()]))

除了细节程度更深入Groovy语法,这些脚本如果没有签名批准通过则无法在Groovy沙箱中运行,这使得此模式在典型的安全Jenkins中无法运行。

代码生成器

在流水线任务的主页面有一个pipeline语法菜单,点击进入可以生成常用的语法

图片

选择下拉框里面的示例步骤,可以选择你需要的step,如读取文件,填入相关参数点击生成流水线脚本,再把生成的流水脚本复制到你的pipeline脚本中即可。

图片

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/161034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes学习-概念5

服务(Service) Kubernetes 中 Service 是 将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法。 Kubernetes 中 Service 的一个关键目标是让你无需修改现有应用以使用某种不熟悉的服务发现机制。 你可以在 Pod 集合中运行代码,无…

nginx使用详解:转发规则、负载均衡、server_name

文章目录 一、nginx常用的转发规则location 指令说明location转发使用 二、upstream负载均衡使用三、server_name使用四、其他常用配置限制请求类型处理静态资源目录遍历问题限制客户端使用的ip或者域名 五、需要注意的地方location /api1 探讨location ~ /api1 探讨&#xff0…

DataFunSummit:2023年OLAP引擎架构峰会-核心PPT资料下载

一、峰会简介 OLAP技术是当前大数据领域的热门方向,该领域在各个行业都有广泛的使用场景,对OLAP引擎的功能有丰富多样的需求。同时,在性能、稳定性和成本方面,也有诸多挑战。目前,OLAP技术没有形成统一的事实标准&…

redis性能管理

redis的数据库是存放在内存当中,所以对内存的监控至关重要 redis内存监控和解析 1.如何查看redis内存使用情况 [rootlocalhost utils]# redis-cli -h 20.0.0.170 -p 6379 20.0.0.170:6379> info memory used_memory:853336 //redis中数据占用的内存 use…

触发设备离线

业务场景 业务开发过程中,我们经常会需要判断远程终端是否在线,当终端离线的时候我们需要发送消息告知相应的系统, 环形队列 1.创建一个index从0到30的环形队列(本质是个数组) 2.环上每一个slot是一个Set&#xf…

python 执行系统命令

subprocess 模块和 os.system 或 os.popen 等函数相比,功能更为强大和灵活,是 Python 官方推荐的执行系统命令的方法。主要的优势包括: 更强的错误处理:subprocess 模块可以更精细地控制错误输出和错误代码,而 os.syst…

自定义springboot的生命周期函数在项目启动完成后去取配置文件中的值

主要是实现smartLifecycle类 package com.ruoyi.workflow.util;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springfr…

MYSQL索引使用注意事项

索引使用注意事项: 1.索引列运算 不要在索引列上进行运算操作,否则索引将失效; 2.字符串不加引号 字符串类型使用时,不加引号,否则索引将失效; 3.模糊查询 如果仅仅是尾部模糊匹配,索引将不会失…

防火墙暴露端口

如果你想开通防火墙上的端口,具体的操作方式可能会取决于你所使用的操作系统。以下是一些常见操作系统的步骤: 1. Linux(例如,Ubuntu 或 CentOS): 使用 ufw(适用于 Ubuntu): # 开…

RK平台查看板子上的dts信息

简介 dts文件描述了硬件每个模块的信息,我们嵌入式软件的调试很多时候都是在改dts文件,有时候我们不确定板子上的固件是否已经更新了我们的修改,这时候我们可以直接读取板子上的dts信息,下面来演示一下。 进入uboot命令行模式 …

关于软raid的实现及常见问题

RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。 磁盘阵列是由很多价格较便宜的磁盘,以硬件(RAID卡)或软件(MDADM&…

关于用css设置input输入框hover的时候的样式以及当input为disabled的时候,不要让hover样式生效

效果如果&#xff1a; 编辑状态下的时候&#xff1a; 只读状态下的时候&#xff1a; 代码如图&#xff1a; <input type"text" name"dataForm.exportCode" id"exportCodeItem" required :disabled"editDisabled" />input:not(…

【前端学java】语法练习-工具类的封装(13)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…

java.net.UnknownHostException: eureka

java.net.UnknownHostException: eureka 哦。HOST漏了 #linux /etc/hosts #windows C:\Windows\System32\drivers\etc\hosts 127.0.0.1 eureka7000 127.0.0.1 eureka7001 127.0.0.1 eureka7002

maven打包可执行jar含依赖lib

修改pom.xml <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- jdk8可用&#xff0c;其他jdk版本可能需改插件版本 --><version>2.3.7.RE…

sql调优

慢查询 SQL 治理方案 一、SQL 性能下降的原因 在对 SQL 进行分析之前&#xff0c;需要明确可能导致 SQL 执行性能下降的原因进行分析&#xff0c;执行性能下降可以体现在很多方面&#xff1a; 查询语句写的烂索引没加好表数据过大数据库连接数不够查询的数据量过大被其他慢s…

MyBatisPlus代码生成

基础依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

visual studio 如何建立 C 语言项目

安装这个 模块。 新建 空项目 创建完成 写demo 点击运行&#xff1a;

【1day】泛微e-office OA系统user_page接口未授权访问漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现