美文网首页
jenkins 共享库使用

jenkins 共享库使用

作者: AppleLin_cdea | 来源:发表于2021-10-09 18:04 被阅读0次

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. 如何使用共享库

分以下几步:

    1. 创建共享库
    1. jenkins 配置 Global Shared Libraries
    1. 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') _ ,它后面的 ‘ _ ’ 不能少。

相关文章

网友评论

      本文标题:jenkins 共享库使用

      本文链接:https://www.haomeiwen.com/subject/kxgqoltx.html