Global Shared Libraries
2021年10月9日17:04:31 星期六
1. 为什么要用共享库?(原因和意义)
存在这样的场景:
在 jenkins 中存在多个 pipeline jobs,
pipeline jobs 之间有相同逻辑功能(有重复相同代码),
为了 dry (don't repeat yourself) 去除重复代码,jenkins 可以提供了一特性: 可以把重复的代码做成通用的共享库(shared libraries)
好处: 一方面精简代码(去重),另一方面减少后续新添 pipeline job 时的重复造轮子。
2. 如何使用共享库
分以下几步:
- 创建共享库
- jenkins 配置 Global Shared Libraries
- jenkinsfile 引用共享库
2.1 创建共享库
定义共享库(Defining Shared Libraries)
要创建目录结构(Directory structure)
(root)
+- src # Groovy source files
| +- org
| +- foo
| +- Bar.groovy # for org.foo.Bar class
+- vars
| +- foo.groovy # for global 'foo' variable
| +- foo.txt # help for 'foo' variable
+- resources # resource files (external libraries only)
| +- org
| +- foo
| +- bar.json # static helper data for org.foo.Bar
它要有 3 个文件夹 src、vars、resources。
src 目录 看起来像标准的 Java 源代码目录结构,在执行 Pipelines 的时候,它被添加到 classpath;
vars目录 存放脚本文件,它们在管道中作为变量,文件名是管道中变量的名称,如果你有个文件叫 vars/log.groovy, log.groovy里有个变函数 def info(message) ...,可以在 Pipeline 中 log.info "hello world" 这样调用它。
resources目录 允许使用外部库中的 libraryResource 步骤来加载关联的非 Groovy 文件。目前,内部库不支持此功能。
2.2 jenkins 配置 Global Shared Libraries
Manage Jenkins » Configure System » Global Pipeline Libraries
add
name
2.3 jenkinsfile 引用共享库
在 pipeline job的 jenkinsfile 的开头添加要使用的共享库方法
@Library('my-shared-library') _
/* Using a version specifier, such as branch, tag, etc */
@Library('my-shared-library@1.0') _
/* Accessing multiple libraries with one statement */
@Library(['my-shared-library', 'otherlib@abc1234']) _
@Library('somelib')
import com.mycorp.pipeline.somelib.UsefulClass
使用共享库的例子
@Library('somelib')
import com.mycorp.pipeline.somelib.Helper
int useSomeLib(Helper helper) {
helper.prepare()
return helper.count()
}
echo useSomeLib(new Helper('some text'))
Defining global variables
vars/log.groovy
def info(message) {
echo "INFO: ${message}"
}
def warning(message) {
echo "WARNING: ${message}"
}
Jenkinsfile
@Library('utils') _
log.info 'Starting'
log.warning 'Nothing to do!'
注意:@Library('somevars') _ ,它后面的 ‘ _ ’ 不能少。
网友评论