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

文章目录

前言

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

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

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

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

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

Jenkins共享库结构

yaml 复制代码
共享库是一些独立的Groovy脚本的集合,可以在外部源代码控制仓库(如Git或Subversion)中托管。
共享库通过名称、源代码检索方法(如SCM)以及可选的默认版本定义。名称应该是一个简短的标识符,因为它将在脚本中使用.
yaml 复制代码
src目录类似于标准java源目录结构。执行流水线时,此目录将添加到类目录中
vars目录托管脚本文件,这些脚本文件在管道中作为变量公开
resources目录允许libraryResource从外部库使用步骤来加载相关联的非Groovy文件

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

1、共享库演示

yaml 复制代码
1)、在jenkins上引用上述创建的共享库
2)、Jenkins添加gitee用户名、密码凭据
3)、在系统配置中使用git 配置全局流水线库(使用gitee仓库为主)
yaml 复制代码
4)、以上三步做完之后,在gitee的jnekinslib仓库下创建vars目录,创建Jenkinsfile文件
5)、在Jenkinsfile文件中引用创建的共享库
6)、修改流水线为
7)、jenkins流水线任务执行 看是否打印出来了传参的内容(this is my jenkins lib)

2、知识点补充

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

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

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

4、groovy基础语法

yaml 复制代码
	无论是声明式还是脚本式的 Pipeline 都依赖了 Groovy 脚本,所以如果要很好的掌握 Pipeline 脚本的用法,我们非常有必要去了解下 Groovy 语言。
4.1、 什么是 Groovy?
yaml 复制代码
	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特点
yaml 复制代码
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、运行方法
yaml 复制代码
可以使用 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、标识符
yaml 复制代码
标识符被用来定义变量,函数或其他用户定义的变量。标识符以字母、美元或下划线开头,切记不能以数字开头
4.5、基本数据类型
4.5.1、string类型
yaml 复制代码
字符串表示: 单引号、双引号、三引号
常用方法:
	contains() 是否包含特定内容,返回true/false
	size() length() 字符串数量、大小长度
	toString() 转换成字符串类型
	indexOf() 元素的索引
	endsWith() 是否指定字符串结尾
	minus()  plus() 去掉、增加字符串
	reverse() 反向排序
	substring(1,2) 字符串的指定索引开始的子字符串
	toUpperCase()  toLowerCase() 字符串大小写转换
	split() 字符串切割、默认为空格 返回列表
4.5.2、list类型
yaml 复制代码
列表符号: []
常用方法:
	+、-、+=、-= 元素增加、减少
	add()、<< 增加元素
	isEmpty() 判断是否为空
	intersect([2,3])、disjoint([1]) 取交集、判断是否有交集
	flatten() 合并嵌套的列表
	unique() 去重
	reverse()、sort() 反转、升序
	count() 元素个数
	join() 将元素按照参数链接
	sum() min() max() 求和、最小值、最大值
	contains() 包含特定元素
	remove(2) removeAll() 移除元素 
	each{} 遍历
4.6、函数使用
yaml 复制代码
	Groovy 中的函数是使用返回类型或使用 def 关键字定义的,函数可以接收任意数量的参数,定义参数时,不必显式定义类型,可以添加修饰符,如 public,private 和 protected,默认情况下,如果未提供可见性修饰符,则该方法为 public公共函数
	语法:
		def PrintMsg(value){
			//....
			println(value)
			return value
		}
4.7、正则表达式

5、常用的pipelineDSL方法

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

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

5.2、withCredentials使用凭据方法
yaml 复制代码
withCredentials([string(credentialsId: "xxx",variable: "sometoken")])
{
	println(sometoken)
}
5.3、checkout下载代码
yaml 复制代码
也可以通过流水线语法生成
checkout([$class: 'GitSCM', branches: [[name: 'branchName']], extensions: [], userRemoteConfigs: [[credentialsId: "${credentialsId}", url: "${srcUrl}"]]])
5.4、publishHTML
yaml 复制代码
生成单元测试报告使用它
publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: false, reportDir: '/tmp/', reportFiles: 'index.html', reportName: 'HTML Report', reportTitles: '', useWrapperFileDirectly: true])
5.5、input交互式方式
yaml 复制代码
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获取构建的用户
yaml 复制代码
// 前提是安装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网络
yaml 复制代码
// 安装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邮件
yaml 复制代码
// 安装Email Extension Template、Email Extension插件

总结

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

相关推荐
海尔辛8 分钟前
学习黑客Linux 命令
linux·运维·学习
love530love36 分钟前
修复笔记:获取 torch._dynamo 的详细日志信息
运维·人工智能·pytorch·笔记·python·深度学习·virtualenv
珹洺1 小时前
Linux操作系统从入门到实战(五)详细讲解Linux权限概念
linux·运维·服务器·网络
程序员JerrySUN1 小时前
驱动开发硬核特训 · Day 27(上篇):Linux 内核子系统的特性全解析
linux·运维·驱动开发
LIUHUING1 小时前
解决在 Linux 中 WPS 字体缺失问题
linux·运维·wps
zai.zai2 小时前
正则表达式与文本三剑客grep、sed、awk
linux·运维·服务器·正则表达式
love530love3 小时前
cuDNN 9.9.0 便捷安装-Windows
运维·windows·python
love530love4 小时前
将 virtualenv 环境迁移到 Conda 环境
运维·windows·python·conda·virtualenv
ephemerals__5 小时前
【Linux】深入理解程序地址空间
linux·运维·服务器
吴声子夜歌5 小时前
Linux运维——Vim技巧一
linux·运维·vim