简单使用

共享库(Shared libraries)是一种可以用来封装函数、变量甚至整个 Pipeline 的机制。通过共享库,可以将常用的功能和流程逻辑定义在单独的 Groovy 脚本中,然后在多个 Pipeline 中重复使用,从而实现代码重用和统一管理

比如说复用这个转成json的方法

//tool.groovy
import groovy.json.JsonSlurper def toJson(result){
def jsonSlurper = new JsonSlurper()
return jsonSlurper.parseText(result)
} //流水线
steps {
script {
def body = tool.toJson("${result.body}")
}
}

封装stage

//myStep.groovy
def myStep(param1, param2) {
// 执行特定操作的代码逻辑
}
//流水线
@Library('my-shared-library') _
pipeline {
agent any
stages {
stage('My Stage') {
steps {
script {
myStep(param1: 'value1', param2: 'value2')
}
}
}
}
}

封装变量,比如Linux和windows的变量

// linux.groovy
def myVariable = 'Linux value'
def param = 'linux' // windows.groovy
def myVariable = 'Windows value'
def param = 'windows' //流水线
steps {
script {
def config
//jenkins自带的方法
if (isUnix()) {
config = load 'linux.groovy'
} else if (isWindows()) {
config = load 'windows.groovy'
} // 使用变量
def value1 = config.myVariable
def value2 = config.param
}
}

可以通过在共享库根目录创建Jenkinsfile,来动态加载pipeline

//Jenkinfile
@Library('my-shared-library@1.0.0') _ def env = 'dev' // 根据实际情况设置环境参数 //通过参数调用不同的流水线脚本
if (env == 'dev') {
deployPipeline = libraryResource('deployDev.groovy')
} else if (env == 'test') {
deployPipeline = libraryResource('deployTest.groovy')
} else {
echo "Unsupported environment: ${env}"
} deployPipeline(appName: 'my-app', deploy: true) // deployDev.groovy
def deployPipeline(Map params) {
pipeline {
agent any
stages {
stage('Deploy to Dev') {
when {
expression { params.deploy == true }
}
steps {
sh 'echo "Deploying ${params.appName} to Dev environment..."
}
}
}
}
} // deployTest.groovy
def deployPipeline(Map params) {
pipeline {
agent any
stages {
stage('Deploy to Test') {
when {
expression { params.deploy == true }
}
steps {
sh 'echo "Deploying ${params.appName} to Test environment..."'
}
}
}
}
}

通过共享库,可以将复杂的流水线拆分,可以复用函数和动态组合等等,非常灵活

项目结构

project/
├── Jenkinsfile
└── my-shared-library/
├── vars/
│ ├── deployPipeline.groovy
│ └── ...
├── src/
│ ├── com/
│ │ ├── example/
│ │ │ ├── MyClass.groovy
│ │ │ └── ...
│ │ └── ...
│ └── ...
├── resources/
│ ├── deployDev.groovy
│ ├── deployTest.groovy
│ └── ...
└── README.md

vars/ 目录用于存放定义全局变量和流程函数的 Groovy 文件,比如上边复用的函数和封装step的函数

resources/ 目录用于存放资源文件,比如环境变量、配置文件等。比如上边的变量文件

src/ 目录用于存放如自定义的类、函数等,一般是写更复杂的类

需要注意的是vars下的groovy可以使用 Jenkins Pipeline的语法,比如echo、error等函数,在src下,只能写groovy语法的函数

src和resources都可以被vars调用

// 使用 load 方法加载 src/com/example/MyClass.groovy
load 'com/example/MyClass.groovy' // 在 vars/deployPipeline.groovy 中调用 resources/deployDev.groovy
libraryResource 'my-shared-library/deployDev.groovy'

配置共享库

首先要将共享库上传到代码仓库中,Jenkins会拉取共享库并编译加载注意,在jenkins也要安装对应的scm插件

在系统配置中找到Global Pipeline Libraries,选择一个Retrieval method,一般是选择Modern method,需要安装scm插件,这里才有有选项,比如git插件

然后在流水线中配置

如果要使用共享库的Jenkinsfile,需要指定路径

使用方式

//引入库
@Library('lib')
import com.mycorp.pipeline.somelib.Helper' //加 _ 就不用import
@Library('lib') _
//使用
def method = new com.mycorp.pipeline.Utils.someStaticMethod()

https://www.jenkins.io/doc/book/pipeline/shared-libraries/

Jenkins共享库使用的更多相关文章

  1. Linux 下编译安装软件,找不到共享库 xx.so 的解决办法

    编译memcached时,报错没有libevent,于是下载libevent,configure , make && make install ,然后在重新安装memcache成功之后 ...

  2. pipeline 共享库

    目录 一.简介 二.共享库扩展 共享库使用 共享库结构 pipeline模板 一些小问题 三.共享库例子 使用公共变量 使用共享库的src方法 使用共享库的vars方法 四.插件实现pipeline ...

  3. 链接(extern、static关键词\头文件\静态库\共享库)

    原文链接:http://www.orlion.ga/781/ 一. 多目标文件的链接 假设有两个文件:stack.c: /* stack.c */ char stack[512]; int top = ...

  4. linux下共享库的注意点之-fpic

    在编译共享库必须加上-fpic.这是为什么呢? 首先看一个简单的例子: #include <stdio.h> int fun1() { printf("fun1\n") ...

  5. 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  6. QT共享库的创建与调用(初级)(附:UI界面不能被改变的其中一个原因)

    背景: 最近在做的一个项目其中一部分既是实现PC与下位机的USB通信.windows平台下已经完成,现需移植到linux平台下. 在linux系统中,通过一段时间的工作,设备已被配置成hid类(后续再 ...

  7. ndk学习9: 动态使用共享库

    动态使用共享库函数 dll_main      环境介绍 续上节代码 目录结构:   android.mk如下: LOCAL_PATH := $(call my-dir) include $(CLEA ...

  8. linux共享库

    linux共享库 linux中共享库一般以.so.x.y.z 命名,其中x,y,z分别为主版本号.次版本号.发布版本号.同一个库,主版本号不同则相互不兼容:主版本相同,次版本号高的库比次版本号低的库有 ...

  9. linux C++ 共享库导出类

    1.共享库的对外接口函数的声明必须加上extern “C”. 2.使用共享库对话接口函数生成的对象指针时在该对象未被释放之前不能关闭共享库句柄,否则会出现segmentation fault错误. 以 ...

  10. 【转载】Linux下动态共享库加载时的搜索路径详解

    转载自:http://www.eefocus.com/article/09-04/71617s.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading ...

随机推荐

  1. [转帖]win10下使用Rclone将OneDrive映射到本地磁盘教程(开机自动挂载)

    win10下使用Rclone将OneDrive映射到本地磁盘教程(开机自动挂载) 下载rclone,winfsp和Git bash Rclone. Winfsp. 和 [Git bash](https ...

  2. [转帖]grafana 连接 influxdb 1.x 和 2.x

    文章目录 一.安装 influxdb Ⅰ.docker 安装 二.常用操作 Ⅰ.influxdb 1.x版本添加用户认证 Ⅱ.influxdb 2.x 使用命令行 Ⅲ.CLI 配置token Ⅴ.CL ...

  3. [转帖]怎么查看Linux服务器硬件信息,这些命令告诉你

    https://zhuanlan.zhihu.com/p/144368206 Linux服务器配置文档找不到,你还在为查询Linux服务器硬件信息发愁吗?学会这些命令,让你轻松查看Linux服务器的C ...

  4. [转帖]总结:nginx502:Tomcat调优之acceptCount

    问题背景:UI页面点击会偶尔返回error,检查调用日志,发现nginx报502报错,因此本文即排查502报错原因. 如下红框可知,访问本机个备机的服务502了,用时3秒左右(可见并不是超时) 先给出 ...

  5. Linux查看登录用户记录信息

    Linux查看登录用户记录信息 登录成功的信息 last 可以简单统计一下: last |awk '{print $3}' |sort |uniq -c |sort -k1nr 登录失败的 就是 la ...

  6. 【译文】IEEE白皮书 6G 太赫兹技术的基本原理 2023版

    第一章 简介 太赫兹波是介于微波和光波之间的光谱区域,频率从 0.1THz ~ 10THz 之间,波长在 3mm ~ 30μm 之间.提供大块连续的频带范围以满足对 Tbit/s 内极高数据传输速率的 ...

  7. 【分享一个工具】通过定义proto3来自动生成多进程模式的插件代码

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 我在多进程插件框架 hashicorp/go-plugin ...

  8. .NetCore开发人员首选框架---Bridge(Abp-VNext + Vue3)

    bridge系统是基于Abp-VNext+Vue3开发的一套前后端分离的通用权限管理系统,不论是单体服务,还是微服务都可在此基础上自由扩展,此框架组合可以说是集成了.netcore在BS架构领域最前沿 ...

  9. 解决SystemExit: 2,args = parser.parse_args() 的问题,

    报错: File "/home/barry/PycharmProjects/EEPC/detect.py", line 283, in parse_opt opt = parser ...

  10. git 上传错误This oplation equires one of the flowi vrsionsot the NET Framework:.NETFramework

    相关文章链接: 码云(gitee)配置SSH密钥 码云gitee创建仓库并用git上传文件 git 上传错误This oplation equires one of the flowi vrsions ...