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

基于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基础语法为前提,作为一个了解知识

相关文章:

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

文章目录 前言Jenkins共享库结构1、共享库演示2、知识点补充3、实践使用共享库格式化输出日志4、groovy基础语法4.1、 什么是 Groovy&#xff1f;4.2、groovy特点4.3、运行方法4.4、标识符4.5、基本数据类型4.5.1、string类型4.5.2、list类型 4.6、函数使用4.7、正则表达式 5、…...

使用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;&#…...

Python连接云端服务器:基于Paramiko库的实践与问题剖析

引言 在软件开发与运维场景中&#xff0c;借助Python连接云端服务器进行操作极为常见。Paramiko库作为实现SSHv2协议的有力工具&#xff0c;为Python与云端服务器的交互搭建了桥梁。本文将深入介绍使用Paramiko连接云端Linux服务器的方法&#xff0c;并剖析过程中可能遭遇的问…...

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

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

洛谷 P1850 [NOIP 2016 提高组] 换教室

题目传送门 前言 终于自己想出概率期望 d p dp dp 的状态了&#xff0c;但是依旧没能相对转移方程。&#xff08;招笑&#xff09; 暴力 这题部分分和特殊情况分给的挺多的&#xff0c;所以先拿部分分。 一、思路 先跑一边 F l o y d Floyd Floyd 最短路求出两点间最短距…...

C#生成二维码和条形码

C# 实现二维码和条形码生成&#xff1a;从入门到实战 文章目录 C# 实现二维码和条形码生成&#xff1a;从入门到实战一、引言二、准备工作2.1 开发环境搭建2.2 引入相关库 三、生成条形码3.1 条形码基本概念3.2 使用[ZXing.Net](https://ZXing.Net)生成条形码3.2.1 核心代码实现…...

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

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

多态(c++详细版)

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

内存泄漏系列专题分析之八:高通相机CamX内存泄漏内存占用分析--通用ION(dmabuf)内存拆解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:内存泄漏系列专题分析之七:高通相机CamX--Android通用ION(dmabuf)内存分配和释放原理 这一篇我们开始讲: 内存泄漏系列专题分析之八:高通相机CamX内存泄漏&内存占用分析--通用ION(dmabuf)内…...

后端项目进度汇报

项目概述 本项目致力于构建一个先进的智能任务自动化平台。其核心技术是一套由大型语言模型&#xff08;LLM&#xff09;驱动的后端系统。该系统能够模拟一个多角色协作的团队&#xff0c;通过一系列精心设计或动态生成的处理阶段&#xff0c;来高效完成各种复杂任务&#xff…...

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

目录 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并运行目录结构常见问题解决与…...

以下是在 Ubuntu 上的几款PDF 阅读器,涵盖轻量级、功能丰富和特色工具:

默认工具&#xff1a;Evince&#xff08;GNOME 文档查看器&#xff09; 特点&#xff1a;Ubuntu 预装&#xff0c;轻量快速&#xff0c;支持基本标注和书签。 安装&#xff1a;已预装&#xff0c;或手动安装&#xff1a; sudo apt install evince功能全面&#xff1a;Okular&…...

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

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

AI领域的MCP(Model-Centric Paradigm)

1. 什么是MCP&#xff08;Model-Centric Paradigm&#xff09;&#xff1f; MCP&#xff08;Model-Centric Paradigm&#xff09;是人工智能开发中的一种核心理念&#xff0c;强调以模型的优化与改进作为主要驱动因素来提升AI系统的表现。在MCP模式下&#xff0c;开发者专注于…...

Pandas比MySQL快?

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

模拟内存管理

文章目录 1. 实验六&#xff1a;内存管理2. 记录内存空间使用情况2.1 全局参数2.2 内存空间相关参数2.3 关键结构体定义2.4 内存系统初始化 3. 记录空闲分区3.1 采用位图的方式记录物理内存中的空闲帧3.1.1 记录方式3.1.2 举例分析 3.2 主要操作3.2.1 初始化空闲帧&#xff1a;…...

大模型调优方法与注意事项

大模型调优&#xff08;Fine-tuning&#xff09;是指对预训练的大型语言模型&#xff08;如GPT、BERT、LLaMA等&#xff09;进行二次训练&#xff0c;使其适应特定任务或领域的过程。以下是调优的关键步骤、方法和注意事项&#xff1a; 一、调优的核心步骤 任务定义与数据准备 …...

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

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

【嵌入式开发-SDIO】

嵌入式开发--SDIO ■ SDIO-简介■■■■■ ■ SDIO-简介 SDIO(Secure Digital Input and Output)&#xff0c;即安全数字输入输出接口。它是在SD卡接口的基础上发展而来&#xff0c;它可以兼容之前的SD卡&#xff0c;并可以连接SDIO接口设备&#xff0c;比如&#xff1a;蓝牙、…...

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

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