当前位置: 首页 > news >正文

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脚本中即可。

图片

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

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

相关文章:

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

JenkinsFile可以通过两种语法来声明流水线结构,一种是声明式语法,另一种是脚本式语法。 脚本式语法以Groovy语言为基础,语法结构同Groovy相同。 由于Groovy学习不适合所有初学者,所以Jenkins团队为编写Jenkins流水线提供一种更简…...

一个ETL流程搞定数据脱敏

数据脱敏是什么? 数据脱敏是指在数据处理过程中,通过一系列的技术手段去除或者替换敏感信息,以保护个人隐私和敏感信息的安全的过程。数据脱敏通常在数据共享、数据分析和软件测试等场景下使用,它旨在降低数据泄露和滥用的风险。…...

重生奇迹mu迹辅助什么好

主流辅助一号选手:弓箭手 智弓作为最老、最有资历的辅助职业,一直都是各类玩家的首要选择。因为智力MM提供的辅助能力都是最基础、最有效、最直观的辅助。能够减少玩家对于装备的渴求度,直接提升人物的攻防,大大降低了玩家升级打…...

【bug 回顾】上传图片超时

测试 bug 问题分析 - 上传图片超时 最近在测试上遇到一个莫名奇妙的问题,最后也没有得到具体是哪块的原因,看各位大佬有没有思路?? 一 、背景 现在我们有三台服务器,用来布两套环境。其中另外一台服务器3配置的 tom…...

Leetcode1410. HTML 实体解析器

Every day a Leetcode 题目来源:1410. HTML 实体解析器 解法1:模拟 遍历字符串 text,每次遇到 ’&‘,就判断以下情况: 双引号:字符实体为 " ,对应的字符是 " 。单引号&a…...

【Django使用】django经验md文档10大模块。第4期:Django数据库增删改查

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展…...

SAP LU04记账更改通知单创建转储单报错:L3094 记帐修改没有份存在

解决办法: 使用事务码LU02,修改过账更改状态,将过账更改状态改为U,强制关闭 1. LU04 查找记账更改通知单号 2. 事务码LU02修改状态 这个时候再用LU04去查看的时候,就不会再显示了...

Redis:Java客户端

前言 "在当今大数据和高并发的应用场景下,对于数据缓存和高效访问的需求日益增长。而Redis作为一款高性能的内存数据库,以其快速的读写能力和丰富的数据结构成为众多应用的首选。与此同时,Java作为广泛应用于企业级开发的编程语言&…...

使用electron工具打包web端到PC端应用程序

根据electron官网快速入门示例可以方便的构建mac端包,我们在此基础上构建windows端exe包. 1在package.json文件的script字段增加以下配置 "scripts": {..."build": "electron-builder --win"}, 2然后在终端执行以下命令 npm run b…...

Django框架环境的搭建(图文详解)

目录 day01 Web框架和Django基础 1.web框架底层 1.1 网络通信​编辑 1.2 常见软件架构 1.3 手撸web框架 2.web框架 2.1 wsgiref 2.2 werkzeug 2.3 各框架的区别 3.快速上手django框架 3.1 安装 3.2 命令行 3.3 Pycharm 4.虚拟环境 4.1 创建虚拟环境 - 命令行 4…...

Java接口自动化测试系列[V1.0.0][概述]

基础知识 在TCP/IP中,HTTP属于传输层协议,该协议采用的是Request-Response的模式,且该协议是无状态的,也就是后续如果要用到前面的信息必须重新请求重新获取;HTTP通过SSL/TSL加密成为HTTPS,与HTTP相比HTTP…...

indexedDB存储

使用 setDBData({ id: name, value: 张三, expire: new Date().getTime() 10000 }, info, infoDB) console.log(getDBData(name, info, infoDB)); 添加或更新数据 async function setDBData(data,storeName "storeName",dbName "dbName",version ) {c…...

双向绑定与单向数据流之争,Solid会取代React吗

现在有一种观点声音逐渐大了起来,认为市面上出现了许多比 React 性能更好的框架,是不是意味着,React 将要被淘汰了? 谈谈我的看法,来做一个深入一点的分析 先说结论:Solid.js 要取代 React 很难 1 双向…...

Java --- JVM之垃圾回收相关知识概念

目录 一、System.gc() 二、内存溢出与内存泄漏 2.1、内存溢出 2.2、内存泄漏 三、Stop the world 四、垃圾回收的并行与并发 4.1、并发 4.2、并行 4.3、并行 vs 并发 4.4、垃圾回收的并发与并行 五、安全点与安全区域 5.1、安全点 5.2、安全区域 六、引用 6.1…...

单节点服务架构

单节点的服务架构: LNMP l:lilnux系统 n:nginx静态页面,转发动态请求 m:mysql数据库,后端服务器,保存用户和密码信息,以及论坛的信息 p:PHP,处理动态请求,动态请求转发数据库,然…...

Ubuntu Server download

前言 Ubuntu——公共云、数据中心和边缘上最受欢迎的 Linux 发行版。自成立以来,Ubuntu 一直在获得市场份额,截至今天已接近 50%。 Ubuntu Server download VersionUbuntu Server 其它主机型号版本Ubuntu AMD历史版下载百度云Ubuntu Server all Ubuntu…...

React 自定义hook 之 防抖和节流

一、简介 防抖和节流主要用于控制事件触发频率,提高页面性能和用户体验。 防抖: 当事件被触发后,在一定时间内有新的对应事件,则会取消老的事件执行。 节流: 当事件触发后,在一定时间内会忽略新的事件执行。 二、技术实现 1、us…...

CVE-2022-21661

简介 CVE-2022-21661是一个与WordPress相关的漏洞,涉及到SQL注入问题。该漏洞主要源于WordPress的WQ_Tax_Query类中的clean_query函数,可能允许攻击者通过控制传递给该函数的数据来控制生成的SQL查询,从而执行任意的SQL代码。 当WordPress的…...

【Python】tensorboard实时查看模型训练过程的方法示例

本文对tensorboard实时查看模型训练过程的方法进行实例详解,以帮助大家理解和使用。 步骤1:查看训练过程保存的文件中是否有这个文件,红框内的。 步骤2:如果有,则打开终端,激活安装过tensorboard的环境。…...

Golang基础-面向对象篇

文章目录 struct结构体类的表示与封装类的继承多态的基本要素与实现interface空接口反射变量的内置pairreflect包解析Struct TagStruct Tag在json中的应用 struct结构体 在Go语言中,可以使用type 关键字来创建自定义类型,这对于提高代码的可读性和可维护…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...

HTML中各种标签的作用

一、HTML文件主要标签结构及说明 1. <&#xff01;DOCTYPE html> 作用&#xff1a;声明文档类型&#xff0c;告知浏览器这是 HTML5 文档。 必须&#xff1a;是。 2. <html lang“zh”>. </html> 作用&#xff1a;包裹整个网页内容&#xff0c;lang"z…...