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

news2025/1/18 9:44:31

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.coloradmin.cn/o/1239322.html

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

相关文章

【UE】用样条线实现测距功能(上)

目录 效果 步骤 一、创建样条网格体组件3D模型 二、实现点击连线功能 三、实现显示两点间距离功能 效果 步骤 一、创建样条网格体组件3D模型 创建一个圆柱模型,这里底面半径设置为10mm,高度设置为1000mm 注意该模型的坐标轴在如下位置&#xff1…

设计循环队列,解决假溢出问题

什么是假溢出? 当我们使用队列这种基本的数据结构时,很容易发现,随着入队和出队操作的不断进行,队列的数据区域不断地偏向队尾方向移动。当我们的队尾指针指向了队列之外的区域时,我们就不能再进行入队操作了&#xff…

瑞吉外卖优化

1.缓存问题 用户数量多&#xff0c;系统访问量大频繁访问数据库,系统性能下降,用户体验差 2.导入依赖 和配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependenc…

C语言好好题(一维数组)

两天没有更新了&#xff0c;贴纸们&#xff0c;有没有想我呀。&#x1f604;&#x1f604;&#x1f604; 好了&#xff0c;就寒暄到这里吧&#xff0c;下面请看题&#xff1a; 有序序列判断 输入一个整数序列&#xff0c;判断是否是有序序列&#xff0c;有序&#xff0c;指序列…

Java基础(程序控制结构篇)

Java的程序控制结构与C语言一致&#xff0c;分为顺序结构、选择结构&#xff08;分支结构&#xff09;和循环结构三种。 一、顺序结构 如果程序不包含选择结构或是循环结构&#xff0c;那么程序中的语句就是顺序的逐条执行&#xff0c;这就是顺序结构。 import java.util.Sc…

iperf3 网络测试

iperf3 测试网络的上下行带宽 下载地址 https://iperf.fr/iperf-download.php 开启服务器 开启客户端 常用命令 -c 代表客户端-s 代表服务端-u 代表 udp-r 代表数据方向是否反向 https://baijiahao.baidu.com/s?id1731514357681464971&wfrspider&forpc

c语言-操作符详解(含优先级与结合性)

文章目录 了解什么是操作数、操作符操作数&#xff1a;操作符 操作符详解&#xff1a;1.算术操作符&#xff1a; 、- 、* 、/ 、%2.移位操作符: << >>3.位操作符: & | ^4. 赋值操作符: 、 、 - 、 * 、 / 、% 、<< 、>> 、& 、| 、^5. 单⽬操…

移动机器人,开启智能柔性制造新篇章

智能制造是当今工业发展的必然趋势&#xff0c;而柔性制造则是智能制造的重要组成部分。在这个快速变革的时代&#xff0c;如何提高生产效率、降低成本、增强灵活性成为了制造业的关键挑战。富唯智能移动机器人应运而生&#xff0c;为柔性制造注入了新的活力。 基于富唯智能AI-…

xss-labs靶场6-10关

文章目录 前言一、靶场6-10关1、关卡62、关卡73、关卡84、关卡95、关卡10 总结 前言 此文章只用于学习和反思巩固xss攻击知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的平台&#xff0c;不能随意去尚未授权的网站做渗透测试&#xff01;&#xff01;&#xff01; …

xilinx zynq平台 elf文件到bin文件格式转化

在嵌入式实际开发过程中&#xff0c;因为系统资源有限&#xff0c;需要尽可能的节省资源&#xff0c;尤其是flash资源。在某些场景下&#xff0c;需要直接执行占用内存较小的bin文件&#xff0c;而非elf文件。但xilinx SDK编译的输出文件一般为elf文件&#xff0c;所以需要进行…

国际版Amazon Lightsail的功能解析

Amazon Lightsail是一项易于使用的云服务,可为您提供部署应用程序或网站所需的一切,从而实现经济高效且易于理解的月度计划。它是部署简单的工作负载、网站或开始使用亚马逊云科技的理想选择。 作为 AWS 免费套餐的一部分&#xff0c;可以免费开始使用 Amazon Lightsail。注册…

【Delphi】使用TWebBrowser执行JavaScript命令传入JSON参数执行出错解决方案

目录 一、问题背景&#xff1a; 二、实际示例&#xff1a; 三、解决方案&#xff1a; 1. Delphi 代码&#xff1a; 2. javaScript代码&#xff1a; 一、问题背景&#xff1a; 在用Delphi开发程序&#xff0c;无论是移动端还是PC端&#xff0c;都可以很方便的使用TWebBrows…

LongAccumulator

原子操作之LongAccumulator 和LongAdder的区别在于&#xff0c;LongAdder是在Cell里面只能做加减操作&#xff0c;不能乘除&#xff0c;而LongAccumulator就可以定义乘除操作。原理和LongAdder都是一样的&#xff0c;一个Base和一个Cells数组。 原文跳转地址

Java游戏之飞翔的小鸟

前言 飞翔的小鸟 小游戏 可以作为 java入门阶段的收尾作品 &#xff1b; 需要掌握 面向对象的使用以及了解 多线程&#xff0c;IO流&#xff0c;异常处理&#xff0c;一些java基础等相关知识。一 、游戏分析 1. 分析游戏逻辑 &#xff08;1&#xff09;先让窗口显示出来&#x…

51单片机按键控制LED灯亮灭的N个玩法

51单片机按键控制LED灯亮灭的N个玩法 1.概述 这篇文章介绍按键的使用&#xff0c;以及通过控制LED灯的小实验&#xff0c;发现按键中存在的问题&#xff0c;然后思考并解决这些问题。达到熟练使用按键控制元器件。 2.搭建硬件环境 1.硬件准备 名称型号数量单片机STC12C205…

【办公常识】写好的代码如何上传?使用svn commit

首先找到对应的目录 找到文件之后点击SVN Commit

如何做好项目管理?年薪百万项目大佬一直在用这11张图

大家好&#xff0c;我是老原。 日常工作中&#xff0c;我们会遇到各种大大小小的工作项目&#xff0c;如何能让项目保质保量的完成&#xff0c;是我们项目经理的目标。 项目管理的流程可以说是由一系列的子过程组成的&#xff0c;它是一个循序渐进的过程&#xff0c;所以不能…

排序算法-----快速排序(非递归实现)

目录 前言 快速排序 基本思路 非递归代码实现 前言 很久没跟新数据结构与算法这一栏了&#xff0c;因为数据结构与算法基本上都发布完了&#xff0c;哈哈&#xff0c;那今天我就把前面排序算法那一块的快速排序完善一下&#xff0c;前面只发布了快速排序递归算法&#xff0c;…

智能合约安全漏洞与解决方案

// SPDX-License-Identifier: MIT pragma solidity ^0.7.0;import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.3/contracts/math/SafeMath.sol";/*智能合约安全在智能合约中安全问题是一个头等大事&#xff0c;因为智能合约不像其他语…