创建和使用共享Pipeline库

创建共享仓库

创建一个独立的代码仓库,结构如下:

my-shared-library/
├── vars/             # 全局变量/函数
│   └── utils.groovy  # 示例工具函数
├── src/              # 正式类库(遵循Java包结构)
│   └── com/
│       └── example/
│           └── BuildTools.groovy
└── resources/        # 非代码资源(如配置文件)

vars 目录下的全局变量可以直接在pipeline中使用,即当写 sayHello('world'),实际调用的是 sayHello.groovy中的call函数

src 目录是标准的Java源码结构,目录中的类被称为类库(Library class),而 @Library('global-shared-library@master') 就是一次性静态加载 src目录下所有代码到 classpath中。

TIP

src目录中的类,可以使用 Groovy中的 @Grab注解,自动下载第三方依赖包

配置Jenkins全局共享库

  • 进入 Manage Jenkins > Configure System > Global Pipeline Libraries
  • 配置参数:
    • Namemy-shared-lib (后续在 Pipeline 中引用的名称)
    • Default version: 分支/Tag(如 main
    • Retrieval method: 选择仓库类型(如 Git)
    • Project Repository: 你的库仓库 URL(如 https://github.com/user/my-shared-library.git

编写共享库函数示例

vars/utils.groovy中定义函数:

def sayHello(String name) {
    echo "Hello, ${name}!"
}

// 重要:通过 call() 方法实现“自定义步骤”
def call(Map config) {
    echo "Build version: ${config.version}"
}

src/com/example/BuildTools.groovy定义类:

package com.example

class BuildTools {
    static void compile(String cmd) {
        println "Compiling with: ${cmd}"
    }
}

在 Pipeline 中使用共享库

方式1:通过注解引用(推荐)

@Library('my-shared-lib@main') _  // @库名@分支,尾部下划线表示不指定名命

pipeline {
    agent any
    stages {
        stage('Demo') {
            steps {
                script {
                    // 调用 vars/ 下的全局函数
                    utils.sayHello("Jenkins")
                    utils(version: '1.0.0')  // 调用 call() 方法

                    // 调用 src/ 中的类
                    com.example.BuildTools.compile('make')
                }
            }
        }
    }
}

方式2:动态加载(灵活指定版本)

library identifier: 'my-shared-lib@dev', retriever: modernSCM(
    [$class: 'GitSCMSource', remote: 'https://github.com/user/my-shared-library.git']
)
文章作者: oohmygosh
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Blog
DevOps Jenkins
喜欢就支持一下吧