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