共享库这并不是一个全新的概念,其实在编程语言Python中,我们可以将Python代码写到一个文件中,当代码数量增加,我们可以将代码打包成模块然后再以import的方式使用此模块中的方法。
在Jenkins中使用Groovy语法,共享库中存储的每个文件都是一个groovy的类,每个文件(类)中包含一个或多个方法。每个方法包含groovy语句块。
可以在Git等版本控制系统中创建一个项目用于存储共享库。共享流水线有助于减少冗余并保持代码整洁。
具有以下三个属性:
- 共享库名称
- 共享库版本
- 共享库地址
共享库目录结构为:
- src: 类似于java的源码目录,执行流水线时会加载到class路径中。
- vars: 存放全局变量脚本,小的功能函数。
- resources: 存放资源文件,类似于配置信息文件。
├── src
│ └── org
│ └── devops
│ └── tools.groovy
├── vars
│ └── GetHosts.groovy
│ └── GetCommitId.groovy
│
└── resources
│ └── org
│ └── devops
│ └── config.json
1. 共享库配置
1.1 创建一个共享库
在gitlab上创建一个项目,本文中项目名称为jenkins,自定义即可。
1.2 创建groovy类文件
新建文件名称:src/org/devops/utils.groovy
文件内容:
package org.devops
// 自定义groovy脚本内容
//打印信息
def PrintMsg(value) {
println(value)
}
PrintMsg('hello world')
提交文件到仓库中。
2. 使用共享库
2.1 下载插件
Shared Groovy libraries
2.2 系统配置
打开系统配置 -> Global Pipeline Libraries
首先,我们为共享库设置一个名称 mylib (自定义,无需与gitlab仓库一致),注意这个名称后续在Jenkinsfile中引用。 再设置一个默认的版本,这里的版本是分支的名称。我默认配置的是main
版本。(gitlab14版本之后,默认分支是main)
接下来我们配置共享库的仓库地址,我的仓库在gitlab中。如果仓库是私有的方式,需要在jenkins的凭据中添加一个账号用于下载共享库。
2.3 使用共享库
在Jenkinsfile中使用 @Library('mylib') _
来加载共享库,注意后面符号 _
用于加载。
类的实例化 def mytools = new org.devops.utils(),
使用类中的方法 mytools.PrintMsg(msg)
。
// def PrintMsg(value){
// println(value)
// }
@Library('mylib') _
def mytools = new org.devops.utils()
pipeline{
agent{
label "build"
}
stages{
stage("checkOut"){
steps{
script {
msg = "jenkins"
mytools.PrintMsg(msg)
}
}
}
}
}
运行流水线查看测试结果。
2.4 多个共享库配置
// 加载mylib共享库
@Library('mylib') _
// 加载mylib共享库的1.0版本
@Library('[email protected]') _
// 加载多个共享库, mylib共享库的默认版本, yourlib共享库的2.0版本(分支)
@Library(['mylib', '[email protected]']) _