# global-shared-library **Repository Path**: devops-samples/global-shared-library ## Basic Information - **Project Name**: global-shared-library - **Description**: global-shared-library - **Primary Language**: Groovy - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-07-11 - **Last Updated**: 2023-07-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # global-shared-library 当有大量的pipeline项目构建任务,有很多代码是重复的,这时需要提取和复用共同的逻辑。 其实pipeline本质就是一个Groovy脚本,所以可以在pipeline中自定义函数,并使用Groovy语言自带的特性。 ## Shared library开发步骤 1. 创建目录结构 ``` mkdir -p resources/org/foo src/org/foo vars (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 ``` - vars 目录下的全局变量可以直接在pipeline中使用,即当写sayHello('world'),实际调用的是sayHello.groovy中的call函数 - src 目录是标准的Java源码结构,目录中的类被称为类库(Library class),而 @Library('global-shared-library@master') 就是一次性静态加载src目录下所有代码到classpath中 - resources目录中是静态资源文件 2. 写shared library 在目录vars中的文件就能够在pipeline中引用 如: ``` // vars/sayHello.groovy def call(String name = 'human') { // Any valid steps can be called from this code, just like in other // Scripted Pipeline echo "Hello, ${name}." } ``` 3. 将该文件目录提交至Git(SVN等)仓库 ## Shared library使用步骤 1. Manage Jenkins ==> Configure System ==>Global Pipeline Libraries点击Add添加Global Pipeline Libraries. Name属性不应太长,在pipeline中是通过关键字library加Name属性来引用library, 然后添加shared library的SCM信息. 2. 在Jenkins文件中添加library关键词引用shared library,如下所示: *Jenkinsfile* ``` @Library('global-shared-library@master') _ pipeline { agent any stages { stage('Build') { steps { sayHello('World') } } } } ``` ## 文档 https://jenkins.io/doc/book/pipeline/shared-libraries/ http://groovy-lang.org/single-page-documentation.html https://www.jianshu.com/p/cc32441ae3b6