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

文章目录

  • 前言
  • 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 WorldHello World从输出结果可以看出了 Groovy 里面支持单引号和双引号两种方式,
注释 支持//和/**/两种方式,
而且不以分号“;”结尾也可以,
但是推荐都带上分号保持代码的一致性
4.4、标识符
标识符被用来定义变量,函数或其他用户定义的变量。标识符以字母、美元或下划线开头,切记不能以数字开头
4.5、基本数据类型
4.5.1、string类型
字符串表示: 单引号、双引号、三引号
常用方法:contains() 是否包含特定内容,返回true/falsesize() 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.mzph.cn/news/904570.shtml

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

相关文章

【Qt4】Qt4中实现PDF预览

方案一&#xff1a; 在Qt4中预览PDF文件&#xff0c;你可以使用多种方法&#xff0c;但最常见和简单的方法之一是使用第三方库。Qt本身并没有内置直接支持PDF预览的功能&#xff0c;但你可以通过集成如Poppler、MuPDF等库来实现这一功能。下面我将展示如何使用Poppler库在Qt4中…

php artisan resetPass 执行密码重置失败的原因?php artisan resetPass是什么 如何使用?-优雅草卓伊凡

php artisan resetPass 执行密码重置失败的原因&#xff1f;php artisan resetPass是什么 如何使用&#xff1f;-优雅草卓伊凡 可能的原因 命令不存在&#xff1a;如果你没有正确定义这个命令&#xff0c;Laravel 会报错而不是提示”重置密码失败”用户不存在&#xff1a;’a…

ai说什么是注解,并以angular ts为例

在编程中&#xff0c;注解&#xff08;Annotation&#xff09; 是一种特殊的语法结构&#xff0c;用于为代码添加元数据&#xff08;metadata&#xff09;&#xff0c;从而在不修改代码逻辑的情况下&#xff0c;提供额外的信息或指示编译器、框架、工具如何处理这些代码。注解通…

【MySQL】-- 联合查询

文章目录 1. 简介1.1 为什么要使用联合查询1.2 多表联合查询时MySQL内部是如何进行计算的 2. 内连接2.1 语法2.2 示例 3. 外连接3.1 语法3.2 示例 4. 自连接4.1 应用场景4.2 示例4.3 表连接练习 5. 子查询5.1 语法5.2 单行子查询5.3 多行子查询5.4 多列子查询5.5 在from 子句中…

【多线程】六、基于阻塞队列的生产者消费者模型

文章目录 Ⅰ. 生产者消费者模型的概念Ⅱ. 生产者消费者模型的优点Ⅲ. 基于阻塞队列的生产者消费者模型MakefileBlock_queue.hpptask.hpptest.cpp Ⅳ. 如何理解提高了效率❓❓❓ Ⅰ. 生产者消费者模型的概念 ​ 生产者消费者模型是一种常见的并发模式&#xff0c;用于解决生产者…

【Vue】全局事件总线 TodoList 事件总线

目录 一、 实现所有组件看到x事件 二、 实现$on $off 以及 $emit 总结不易~ 本章节对我有很大的收获&#xff0c; 希望对你也是&#xff01;&#xff01;&#xff01; 本节素材已上传至Gitee&#xff1a;yihaohhh/我爱Vue - Gitee.com 全局事件总线图&#xff1a; 本节素材…

Python编程virtualenv库的简介和使用方法

Python编程virtualenv库的简介和使用方法 virtualenv和conda的区别是什么

MySQL的行级锁锁的到底是什么?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL的行级锁锁的到底是什么?】面试题。希望对大家有帮助&#xff1b; MySQL的行级锁锁的到底是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL的行级锁是数据库管理系统&#xff08;DBMS&#xff09;的一…

【C++游戏引擎开发】第33篇:物理引擎(Bullet)—射线检测

一、射线检测核心理论体系 1.1 射线检测的数学基础 1.1.1 参数化射线方程 射线在三维空间中的数学表达采用参数方程: r ( t ) = o + t d ^ ( t ∈ [

【操作系统】线程崩溃机制详解

在分布式系统与多线程编程的世界里&#xff0c;一个看似简单的问题却暗藏玄机&#xff1a;当某条线程突然崩溃&#xff0c;其所属进程会随之消亡吗&#xff1f;这个问题背后隐藏着操作系统与编程语言的精妙设计&#xff0c;本文将从底层原理到工程实践层层剖析。 一、线程崩溃…

无人机 | 无人机设计概述

无人机设计是一个复杂的系统工程&#xff0c;涉及空气动力学、电子技术、材料科学、控制算法等多个领域的综合应用。以下是无人机设计的主要模块和关键要素概述&#xff1a; 一、总体设计目标 任务需求定义 用途&#xff1a;航拍、物流、农业、军事侦察、环境监测等性能指标&am…

强啊!Oracle Database 23aiOracle Database 23ai:使用列别名进行分组排序!

大家好&#xff0c;这里是架构资源栈&#xff01;点击上方关注&#xff0c;添加“星标”&#xff0c;一起学习大厂前沿架构&#xff01; 从 Oracle Database 23ai 开始&#xff0c;您可以在 GROUP BY 和 HAVING 子句中直接使用列别名。此功能在早期版本的 Oracle Database 中不…

Modbus 转 IEC61850 网关

第一章 产品概述 Modbus 转 IEC61850 网关型号 SG-IEC61850-Modbus &#xff0c;是三格电子推出的工业级网关&#xff08;以 下简称盒子或网关&#xff09;&#xff0c;主要用于 Modbus RTU/TCP 数据采集、 DLT645-1997/2007 数据采集&#xff0c; 可接多功能电力仪表…

MySQL 中的 MVCC 是什么?

MySQL 中的 MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并发控制&#xff09; 是一种用于实现高并发读写操作的机制&#xff0c;它通过维护数据的多个版本来解决读写冲突&#xff0c;从而在保证事务隔离性的同时&#xff0c;减少锁的使用&#xff0c…

【Python】让Selenium 像Beautifulsoup一样,用解析HTML 结构的方式提取元素!

我在使用selenium的find_element的方式去获取网页元素&#xff0c;一般通过xpath、css_selector、class_name的方式去获取元素的绝对位置。 但是有时候如果网页多了一些弹窗或者啥之类的&#xff0c;绝对位置会发生变化&#xff0c;使用xpath等方法&#xff0c;需要经常变动。…

使用xlwings将excel表中将无规律的文本型数字批量转化成真正的数字

之前我写了一篇文章excel表中将无规律的文本型数字批量转化成真正的数字-CSDN博客 是使用excel自带的操作&#xff0c;相对繁琐。 今天使用xlwings操作&#xff0c;表格如下&#xff08;有真正的数字&#xff0c;也有文本型数字&#xff0c;混在在一起&#xff09;&#xff1…

ICML 2025录取率公布,spotlight posters仅占2.6%

近日&#xff0c;ICML 2025公布了论文录用结果。本次大会共收到 12,107篇有效论文投稿&#xff0c;比去年增加了28%&#xff0c;今年录取论文3,260篇&#xff0c;录取率为 26.9%。其中仅有313篇被列为“焦点海报”&#xff08;即所有投稿中排名前2.6%的论文&#xff09;&#x…

全局网络:重构数字时代的连接范式

从局部到全局 —— 网络架构的范式革命 在全球化与数字化深度融合的今天&#xff0c;传统网络架构的 “碎片化” 问题日益凸显&#xff1a;跨地域数据流通低效、设备互联孤岛化、安全策略难以统一。 全局网络作为一种突破地域与技术边界的新型网络架构&#xff0c;正成为企业…

SpringAI实现AI应用-内置顾问

SpringAI实战链接 1.SpringAl实现AI应用-快速搭建-CSDN博客 2.SpringAI实现AI应用-搭建知识库-CSDN博客 3.SpringAI实现AI应用-内置顾问-CSDN博客 4.SpringAI实现AI应用-使用redis持久化聊天记忆-CSDN博客 5.SpringAI实现AI应用-自定义顾问&#xff08;Advisor&#xff09…

Nginx核心原理以及案例分析(AI)

一、Nginx核心原理分析 1. ‌事件驱动与非阻塞模型‌ ‌Epoll异步机制‌&#xff1a;基于Linux的epoll模型实现异步非阻塞I/O处理&#xff0c;单线程可高效管理数万并发连接&#xff0c;避免传统select模型的轮询性能瓶颈。‌多进程架构‌&#xff1a;采用Master-Worker模式&…