基于Jenkins的DevOps工程实践之Jenkins共享库

news2025/5/9 14:22:42

文章目录

  • 前言
  • Jenkins共享库结构
      • 1、共享库演示
      • 2、知识点补充
      • 3、实践使用共享库格式化输出日志
      • 4、groovy基础语法
        • 4.1、 什么是 Groovy?
        • 4.2、groovy特点
        • 4.3、运行方法
        • 4.4、标识符
        • 4.5、基本数据类型
          • 4.5.1、string类型
          • 4.5.2、list类型
        • 4.6、函数使用
        • 4.7、正则表达式
      • 5、常用的pipelineDSL方法
        • 5.1、readJson数据格式化方法
        • 5.2、withCredentials使用凭据方法
        • 5.3、checkout下载代码
        • 5.4、publishHTML
        • 5.5、input交互式方式
        • 5.6、BuildUser获取构建的用户
        • 5.7、httpRequest网络
        • 5.8、email邮件
  • 总结

前言

共享库这并不是一个全新的概念,其实在编程语言Python中,我们可以将Python代码写到一个文件中,当代码数量增加,我们可以将代码打包成模块然后再以import的方式使用此模块中的方法。

在Jenkins中使用Groovy语法,共享库中存储的每个文件都是一个groovy的类,每个文件(类)中包含一个或多个方法。每个方法包含groovy语句块。

创建共享库,共享库的目的就是将一些反复使用的模块进行封装,比如拉取代码模块,邮件通知模块,这样使得你的Jenkinsfile看起来更加简洁,减少代码量。

可以在Git等版本控制系统中创建一个项目用于存储共享库。共享流水线有助于减少冗余并保持代码整洁。

总结就是将所有的工具以共享库的方式封装起来

Jenkins共享库结构

共享库是一些独立的Groovy脚本的集合,可以在外部源代码控制仓库(如Git或Subversion)中托管。
共享库通过名称、源代码检索方法(如SCM)以及可选的默认版本定义。名称应该是一个简短的标识符,因为它将在脚本中使用.

在这里插入图片描述

src目录类似于标准java源目录结构。执行流水线时,此目录将添加到类目录中
vars目录托管脚本文件,这些脚本文件在管道中作为变量公开
resources目录允许libraryResource从外部库使用步骤来加载相关联的非Groovy文件

在gitee上创建一个共享库jenkinslib,用于入门循环演示

在这里插入图片描述

在这里插入图片描述

1、共享库演示

1)、在jenkins上引用上述创建的共享库
2)、Jenkins添加gitee用户名、密码凭据
3)、在系统配置中使用git 配置全局流水线库(使用gitee仓库为主)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4)、以上三步做完之后,在gitee的jnekinslib仓库下创建vars目录,创建Jenkinsfile文件
5)、在Jenkinsfile文件中引用创建的共享库
6)、修改流水线为
7)、jenkins流水线任务执行 看是否打印出来了传参的内容(this is my jenkins lib)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、知识点补充

怎么快速检测pipeline是否正确?
1、vscdoe下载Jenkins Pipeline Linter Connector插件(下载过程不描述)
2、下载插件完成后,配置Jenkins的url、username、pwd
3、创建Jenkinsfile文件, 通过 vscode 命令面板 (Command Pallette) 使用 Validate Jenkins 开启 Jenkinsfile 校验

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、实践使用共享库格式化输出日志

作用:
	为了更好的在控制台高亮显示每个阶段的执行步骤,使用格式化输出方式实现
步骤:	
    1、jenkins安装ansicolor插件
    2、流水线生成ansicolor语法,如下图1所示
    3、修改jenkinslib库中的groovy脚本,添加日志格式化输出,如下图2所示
    4、修改jenkinfile,因为之前调用的PrintMsg传参是1个参数,现在是传入两个参数,如下图3、4所示
    5、执行流水线任务,查看console output输入的样式,如下图5所示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4、groovy基础语法

	无论是声明式还是脚本式的 Pipeline 都依赖了 Groovy 脚本,所以如果要很好的掌握 Pipeline 脚本的用法,我们非常有必要去了解下 Groovy 语言。
4.1、 什么是 Groovy?
	Groovy是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性
	Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行 Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 Groovy 与 Java 代码的互操作很容易。(注意:不是指Groovy替代java,而是指Groovy和java很好的结合编程
官方网站: https://groovy.apache.org
推荐groovy学习地址: https://www.w3cschool.cn/groovy/
4.2、groovy特点
1、构建在强大的Java语言之上 并 添加了从Python,Ruby和Smalltalk等语言中学到的 诸多特征,例如动态类型转换、闭包和元编程(metaprogramming)支持。

2、为Java开发者提供了 现代最流行的编程语言特性,而且学习成本很低(几乎为零)。

3、支持DSL(Domain Specific Languages领域定义语言)和其它简洁的语法,让代码变得易于阅读和维护。

4、受检查类型异常(Checked Exception)也可以不用捕获。

5、Groovy拥有处理原生类型,面向对象以及一个Ant DSL,使得创建Shell Scripts变得非常简单。

6、在开发Web,GUI,数据库或控制台程序时 通过 减少框架性代码 大大提高了开发者的效率。

7、支持单元测试和模拟(对象),可以 简化测试。

8、无缝集成 所有已经存在的 Java对象和类库。

9、直接编译成Java字节码,这样可以在任何使用Java的地方 使用Groovy。

10、支持函数式编程,不需要main函数。

11、一些新的运算符。

12、默认导入常用的包。

13、断言不支持jvm的-ea参数进行开关。

14、支持对对象进行布尔求值。

15、类不支持default作用域,且默认作用域为public。

16、groovy中基本类型也是对象,可以直接调用对象的方法。
4.3、运行方法
可以使用 groovy 命令运行下面的程序:
class Example {
   static void main(String[] args) {
        // 使用 println 打印信息到 stdout
        /*除了上面的注释方法外,这里没也是注释信息哦*/
        println 'Hello World'
        println "Hello World";
   }
}
groovy 1hello.groovy //运行方法
    Hello World
    Hello World

从输出结果可以看出了 Groovy 里面支持单引号和双引号两种方式,
注释 支持//和/**/两种方式,
而且不以分号“;”结尾也可以,
但是推荐都带上分号保持代码的一致性
4.4、标识符
标识符被用来定义变量,函数或其他用户定义的变量。标识符以字母、美元或下划线开头,切记不能以数字开头
4.5、基本数据类型
4.5.1、string类型
字符串表示: 单引号、双引号、三引号
常用方法:
	contains() 是否包含特定内容,返回true/false
	size() length() 字符串数量、大小长度
	toString() 转换成字符串类型
	indexOf() 元素的索引
	endsWith() 是否指定字符串结尾
	minus()  plus() 去掉、增加字符串
	reverse() 反向排序
	substring(1,2) 字符串的指定索引开始的子字符串
	toUpperCase()  toLowerCase() 字符串大小写转换
	split() 字符串切割、默认为空格 返回列表
4.5.2、list类型
列表符号: []
常用方法:
	+、-、+=、-= 元素增加、减少
	add()、<< 增加元素
	isEmpty() 判断是否为空
	intersect([2,3])、disjoint([1]) 取交集、判断是否有交集
	flatten() 合并嵌套的列表
	unique() 去重
	reverse()、sort() 反转、升序
	count() 元素个数
	join() 将元素按照参数链接
	sum() min() max() 求和、最小值、最大值
	contains() 包含特定元素
	remove(2) removeAll() 移除元素 
	each{} 遍历
4.6、函数使用
	Groovy 中的函数是使用返回类型或使用 def 关键字定义的,函数可以接收任意数量的参数,定义参数时,不必显式定义类型,可以添加修饰符,如 public,private 和 protected,默认情况下,如果未提供可见性修饰符,则该方法为 public公共函数
	语法:
		def PrintMsg(value){
			//....
			println(value)
			return value
		}
4.7、正则表达式

在这里插入图片描述

5、常用的pipelineDSL方法

5.1、readJson数据格式化方法
在流水线语法中可以生成。必须安装插件Pipeline Utility Steps
语法示例:
def response = readJSON text: "${scanResult}"
println(scanResult)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.2、withCredentials使用凭据方法
withCredentials([string(credentialsId: "xxx",variable: "sometoken")])
{
	println(sometoken)
}

在这里插入图片描述

5.3、checkout下载代码
也可以通过流水线语法生成
checkout([$class: 'GitSCM', branches: [[name: 'branchName']], extensions: [], userRemoteConfigs: [[credentialsId: "${credentialsId}", url: "${srcUrl}"]]])

在这里插入图片描述

在这里插入图片描述

5.4、publishHTML
生成单元测试报告使用它
publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: false, reportDir: '/tmp/', reportFiles: 'index.html', reportName: 'HTML Report', reportTitles: '', useWrapperFileDirectly: true])

在这里插入图片描述

5.5、input交互式方式
def result=input message: '选择xxxx', ok: '提交', parameters: [extendedChoice(description: 'xxx',descriptionPropertyValue: '',multiSelectDelimiter: '.',name: 'failePositiveCase',quoteValue: false,saveJSONParameterToFile: false,type: 'PT_CHECKBOX',value: "1,2,3",visibleItemCount: 99)]
5.6、BuildUser获取构建的用户
// 前提是安装build user vars插件,而且要再系统配置中勾选开启
wrap([$class: 'BuildUser']){
	echo "full name is $BUILD_USER"
	echo "user id is $BUILD_USER"
	echo "user email is $BUILD_USER"
}
5.7、httpRequest网络
// 安装HTTP Request插件
ApiUrl= "http://xxxx/api/project_branches/list?project=${projectName}"
Result= httpRequest authentication: 'xxxx',
				  quiet: true,
				  contentType: 'APPLICATION_JSON',
				  url: "${ApiUrl}"
5.8、email邮件
// 安装Email Extension Template、Email Extension插件

在这里插入图片描述

总结

本篇文章从如何生成pipeline DSL常用语法和groovy基础语法为前提,作为一个了解知识

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

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

相关文章

使用Qt自带的Qt assistant时如何添加需要查看的文档

当我们双击打开Qt Assistant时 左边目录栏只有自带的帮助文档&#xff0c;所以需要添加要查看的文档 点击左上角Edit中的Preferences&#xff0c;点击add 找到qdoc文件夹 全选里面的内容 点击Apply 点击ok 左边的目录栏就出现所有这个版本的Qt有关的文档啦

基于网络爬虫+Spark+Hadoop等大数据和SpringBoot技术实现的的汽车行业大数据分析与可视化平台系统(源码+论文+PPT+部署文档教程等)

博主介绍&#xff1a;CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围…

日本IT|AI应用工程师主要工作内容以及职业前景解析

1. 主要工作内容 AI应用工程师是&#xff1a; 类别具体工作内容常见工具需求分析和业务部门沟通&#xff0c;明确「用AI解决什么问题」PowerPoint, Excel, Miro模型选型与微调用现成AI&#xff08;如BERT、YOLOv8、Stable Diffusion等&#xff09;做Fine-TuningPython (PyTor…

Soft Mask(软遮罩)技术

一、概述 Soft Mask是一种技术或工具&#xff0c;主要用于实现平滑的边缘遮罩效果。它在不同的应用领域有不同的实现和定义 1.在Unity UI设计中 SoftMask是一款专为Unity设计的高级遮罩工具&#xff0c;它突破了传统Mask的限制&#xff0c;提供了更为灵活和细腻的UI遮罩解决方案…

ESP32开发之freeRTOS的互斥量

什么是互斥量互斥量的应用场合互斥量的API函数基本代码结构互斥量使用举例递归锁递归锁举例总结什么是互斥量 在freeRTOS中,多个任务访问一块共享资源,会产生竞争现象。 比如马路上只有一个很早以前的电话亭,A、B都想要打电话,然后他们就开始打架了。但是如果A先进去了然…

K8s 资源分类

K8s 资源分类图谱 内置资源的分类 1、工作负载相关&#xff1a; Pod&#xff1a;最小的部署单元&#xff0c;包含一个或多个容器。 Deployment&#xff1a;管理无状态应用的副本和滚动更新。 StatefulSet&#xff1a;适用于有状态应用&#xff08;如数据库&#xff09;&#…

基于 Flask的深度学习模型部署服务端详解

基于 Flask 的深度学习模型部署服务端详解 在深度学习领域&#xff0c;训练出一个高精度的模型只是第一步&#xff0c;将其部署到生产环境中&#xff0c;为实际业务提供服务才是最终目标。本文将详细解析一个基于 Flask 和 PyTorch 的深度学习模型部署服务端代码&#xff0c;帮…

【金仓数据库征文】金仓数据库 KES:MySQL 迁移实用指南

我们都知道&#xff0c;现在企业数字化转型那可是势在必行&#xff0c;数据库迁移这事儿就变得特别关键。金仓数据库的 KingbaseES&#xff08;简称 KES&#xff09;&#xff0c;就给咱从 MySQL 往 KES 迁移数据库提供了一套超好用的方案。下面咱就讲下 咋用金仓数据库来完成这…

多态(c++详细版)

一.多态 1.1 多态的概念 多态(polymorphism)的概念&#xff1a;通俗来说&#xff0c;就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态)&#xff0c;这⾥我们重点讲运⾏时多态&#xff0c;编译时多态(静态多态)和运⾏时多态(动态多态)。编译时多态(静态多态)主…

数据结构——二叉树和堆(万字,最详细)

目录 1.树 1.1 树的概念与结构 1.2 树相关的术语 1.3 树的表示法 2.二叉树 2.1 概念与结构 2.2 特殊的二叉树 2.2.1 满二叉树 2.2.2 完全二叉树 2.3 二叉树存储结构 2.3.1 顺序结构 2.3.2 实现顺序结构二叉树 2.3.2.1 堆的概念与结构 2.3.2. 2 堆的插入与删除数据…

MATLAB基于格拉姆角场与2DCNN-BiGRU的轴承故障诊断模型

本博客来源于CSDN机器鱼&#xff0c;未同意任何人转载。 更多内容&#xff0c;欢迎点击本专栏目录&#xff0c;查看更多内容。 目录 0 引言 1 格拉姆角场原理 2 2DCNN-BiGRU网络结构 3 应用实例 3.1 数据准备 3.2 格拉姆角场数据提取 3.3 网络模型搭建-重中之重 3.4 …

正点原子IMX6U开发板移植Qt时出现乱码

移植Qt时出现乱码 1、前言2、问题3、总结 1、前言 记录一下正点原子IMX6U开发板移植Qt时出现乱码的解决方法&#xff0c;方便自己日后回顾&#xff0c;也可以给有需要的人提供帮助。 2、问题 用正点原子IMX6U开发板移植Qt时移植Qt后&#xff0c;sd卡里已经存储了Qt的各种库&…

JVM局部变量表和操作数栈的内存布局

局部变量表和操作数栈 首先看一段Java源码 public class Add_Sample{public int add(int i, int j){int k 100;int result i j k;return result;}public static void main(String[] args){int result new Add_Sample().add(10,20);System.out.println(result);} }使用ja…

Mockoon 使用教程

文章目录 一、简介二、模拟接口1、Get2、Post 一、简介 1、Mockoon 可以快速模拟API&#xff0c;无需远程部署&#xff0c;无需帐户&#xff0c;免费&#xff0c;跨平台且开源&#xff0c;适合离线环境。 2、支持get、post、put、delete等所有格式。 二、模拟接口 1、Get 左…

使用 IDEA + Maven 搭建传统 Spring MVC 项目的详细步骤(非Spring Boot)

搭建Spring MVC项目 第一步&#xff1a;创建Maven项目第二步&#xff1a;配置pom.xml第三步&#xff1a;配置web.xml第四步&#xff1a;创建Spring配置文件第五步&#xff1a;创建控制器第六步&#xff1a;创建JSP视图第七步&#xff1a;配置Tomcat并运行目录结构常见问题解决与…

3.2.3 掌握RDD转换算子 - 4. 按键归约算子 - reduceByKey()

在本节课中&#xff0c;我们深入学习了Spark RDD的reduceByKey()算子。reduceByKey()主要用于处理元素为(key, value)形式的RDD&#xff0c;能够将相同key的元素聚集并合并&#xff0c;最终返回一个新RDD&#xff0c;其元素类型与原RDD保持一致。通过案例演示&#xff0c;我们首…

Pandas比MySQL快?

知乎上有人问&#xff0c;处理百万级数据&#xff0c;Python列表、Pandas、Mysql哪个更快&#xff1f; Pands是Python中非常流行的数据处理库&#xff0c;拥有大量用户&#xff0c;所以拿它和Mysql对比也是情理之中。 实测来看&#xff0c;MySQL > Pandas > Python列表…

简易的考试系统设计(Web实验)

简易的考试系统设计&#xff08;Web实验&#xff09; 1.实验内容与设计思想&#xff08;一&#xff09;实验需求&#xff08;二&#xff09;设计思路 2.代码展示3.实验小结 1.实验内容与设计思想 &#xff08;一&#xff09;实验需求 1.编写两个页面程序&#xff0c;一个HTML…

基于Kubernetes的Apache Pulsar云原生架构解析与集群部署指南(上)

#作者&#xff1a;闫乾苓 文章目录 概念和架构概述主要特点消息传递核心概念Pulsar 的消息模型Pulsar 的消息存储与分发Pulsar 的高级特性架构BrokerBookKeeperZooKeeper 概念和架构 概述 Pulsar 是一个多租户、高性能的服务器到服务器消息传递解决方案。Pulsar 最初由雅虎开…

使用JAVA对接Deepseek API实现首次访问和提问

一、标题 参考&#xff1a;https://www.cnblogs.com/saoge/p/18866776 使用JAVA对接Deepseek API实现首次访问和 提问&#xff1a;我有50万能做什么小本生意&#xff0c;举例3个! 二、代码 import java.io.BufferedReader; import java.io.InputStreamReader; import java.…