Jenkins共享库使用
简单使用
共享库(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共享库使用的更多相关文章
- Linux 下编译安装软件,找不到共享库 xx.so 的解决办法
编译memcached时,报错没有libevent,于是下载libevent,configure , make && make install ,然后在重新安装memcache成功之后 ...
- pipeline 共享库
目录 一.简介 二.共享库扩展 共享库使用 共享库结构 pipeline模板 一些小问题 三.共享库例子 使用公共变量 使用共享库的src方法 使用共享库的vars方法 四.插件实现pipeline ...
- 链接(extern、static关键词\头文件\静态库\共享库)
原文链接:http://www.orlion.ga/781/ 一. 多目标文件的链接 假设有两个文件:stack.c: /* stack.c */ char stack[512]; int top = ...
- linux下共享库的注意点之-fpic
在编译共享库必须加上-fpic.这是为什么呢? 首先看一个简单的例子: #include <stdio.h> int fun1() { printf("fun1\n") ...
- 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- QT共享库的创建与调用(初级)(附:UI界面不能被改变的其中一个原因)
背景: 最近在做的一个项目其中一部分既是实现PC与下位机的USB通信.windows平台下已经完成,现需移植到linux平台下. 在linux系统中,通过一段时间的工作,设备已被配置成hid类(后续再 ...
- ndk学习9: 动态使用共享库
动态使用共享库函数 dll_main 环境介绍 续上节代码 目录结构: android.mk如下: LOCAL_PATH := $(call my-dir) include $(CLEA ...
- linux共享库
linux共享库 linux中共享库一般以.so.x.y.z 命名,其中x,y,z分别为主版本号.次版本号.发布版本号.同一个库,主版本号不同则相互不兼容:主版本相同,次版本号高的库比次版本号低的库有 ...
- linux C++ 共享库导出类
1.共享库的对外接口函数的声明必须加上extern “C”. 2.使用共享库对话接口函数生成的对象指针时在该对象未被释放之前不能关闭共享库句柄,否则会出现segmentation fault错误. 以 ...
- 【转载】Linux下动态共享库加载时的搜索路径详解
转载自:http://www.eefocus.com/article/09-04/71617s.html 对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading ...
随机推荐
- [转帖]dd - Linux世界中的搬运工
<存储工具系列文章>主要介绍存储相关的测试和调试工具,包括不限于dd.fio.vdbench.iozone.iometer.cosbench等性能负载工具,及strace等调试工具. dd ...
- [转帖]整理常用的 vim 命令
vim 是一款功能强大的文本编辑器,它是Linux下常用的编辑器之一,对于熟练掌握了 vim 的人来说,用它编辑文件,方便又快捷,能极大的提高工作效率 vim 功能强大,对应的命令也非常的多,对于初学 ...
- 【实践篇】最全的【DDD领域建模】小白学习手册(文末附资料)
导读 DDD领域建模被各个大小厂商提起并应用,而每个人都有自己的理解,本文就是针对小白,系统地讲解DDD到底是什么,解决了什么问题,及一些建议和实践.本文主要是思想的一种碰撞和分享,希望能对朋友们有所 ...
- 2020美亚个人赛wp
案例背景 2020年9月,数名信用卡持有人向警方报案,指他们的信用卡被不知名人士在一家本地网上商店购买手机.订单大部分来自海外的网络地址,但有一宗订单来自本地.警方经调查后发现该本地网络地址的注册地址 ...
- 【windows Server 2019系列】 构建IIS服务器
个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying Web服务器也称为WWW(World Wide W ...
- 开源OpenIM:高性能、可伸缩、易扩展的即时通讯架构
网上有很多关于IM的教程和技术博文,有亿级用户的IM架构,有各种浅谈原创自研IM架构,也有微信技术团队分享的技术文章,有些开发者想根据这些资料自研IM.理想很丰满,现实很骨感,最后做出来的产品很难达到 ...
- String 中的Trim
Trim 切除首尾指定字符 var newStr=""; char[] trimChars={'@','#','$',' '}; string strC="@Hello# ...
- System V|共享内存基本通信框架搭建|【超详细的代码解释和注释】
前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕数据结构https://blog.csdn.net/yu_cblog/category_11490888.html?spm=1001.2014. ...
- CF452F Permutation 与 P2757 [国家集训队] 等差子序列 题解
两道基本一样的题: 题目链接: P2757 [国家集训队] 等差子序列 Permutation 链接:CF 或者 洛谷 等差子序列那题其实就是长度不小于 \(3\) 的等差数列是否存在,我们考虑等于 ...
- CF678F Lena and Queries题解
题目链接:CF 或者 洛谷 可以看到查询和插入就是李超线段树的基本操作,但在原有基础上多了一个删除操作,李超线段树不支持删除操作,但支持可撤销和可持久化,所以我们容易想到外层再套一个线段树分治即可.本 ...