Jenkins Shared Libraries
流水线支持创建 "共享库" ,可以在外部源代码控制仓库中定义并加载到现有的流水线中。
目录结构:
(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
src
目录像标准的 Java 源目录结构。当执行流水线时,该目录被添加到类路径下。
vars
目录定义可从流水线访问的全局变量的脚本。文件的名称是Pipeline中变量的名称。如果有一个叫vars/log.groovy的文件中有一个def info(message)…函数,我们可以在Pipeline中通过log.info "hello world"来访问这个函数。同时可以在文件中定义多个函数。
定义全局变量
vars/log.groovy
def info(message) {
echo "INFO: ${message}"
}
def warning(message) {
echo "WARNING: ${message}"
}
Jenkins配置
进入"系统管理—系统配置—Global Pipeline Libraries"进行配置。


在流水线中使用Libraries
#使用全局变量/方法 (从 vars/ 目录):
@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']) _
#当引用类库时 (在 src/ 目录下), 通常需要 import 语句:
@Library('somelib')
import com.mycorp.pipeline.somelib.UsefulClass
编写Jenkinsfile
node('openjdk8') {
@Library('jenkins_library') _
log.info 'Starting'
log.warning 'Nothing to do!'
}
@Library('jenkins_library') _
pipeline {
agent {label 'openjdk8'}
stages {
stage ('Example') {
steps {
script {
log.info 'Starting'
log.warning 'Nothing to do!'
}
}
}
}
}
执行该流水线,jenkins日志如下所示
······
2022-01-13 19:32:06.437 | . Running on openjdk8-l59ll in /home/jenkins/agent/workspace/test-library
2022-01-13 19:32:06.473 | . [Pipeline] {
2022-01-13 19:32:06.707 | . [Pipeline] echo
2022-01-13 19:32:06.723 | . INFO: Starting
2022-01-13 19:32:06.784 | . [Pipeline] echo
2022-01-13 19:32:06.787 | . WARNING: Nothing to do!
2022-01-13 19:32:06.793 | . [Pipeline] }
2022-01-13 19:32:06.818 | . [Pipeline] // node
2022-01-13 19:32:06.837 | . [Pipeline] End of Pipeline
2022-01-13 19:32:06.861 | . Finished: SUCCESS
网友评论