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 ...
随机推荐
- 【转帖】32.MinorGC、MajorGC和FullGC的对比
目录 1.MinorGC.MajorGC和FullGC的对比 2.GC触发机制 1.MinorGC.MajorGC和FullGC的对比 1.JVM在进行GC的时候,并不是每次都是对新生代.老年代.永久 ...
- [转帖]linux下 进程io队列,IO队列和IO调度
IO体系概览 先看看本文主题IO调度和IO队列处于整个IO体系的哪个位置,这个IO体系是非常重要的,了解IO体系我们可以对整个IO过程有个全面的认识.虽然一下两下并不清楚IO体系各个部分的细节,但是我 ...
- [转帖]shell脚本变量详解(自定义变量、环境变量、变量赋值、变量运算、变量内容替换)
https://developer.aliyun.com/article/885658 简介: shell变量 shell变量是指用一个特定的字符串去表示不固定的内容 1.变量的类型 1.1自定义变量 ...
- CentOS7上面一键部署rabbitmq的简单方法
1. rabbitmq的安装部署比redis之类的要麻烦一些. 主要是他是基于erlang写的 而不是基于c或者是c++写的 2. 很多时候编译需要添加很多组件, 但是一些机器可能不会让添加这么多的组 ...
- 神经网络优化篇:详解为超参数选择合适的范围(Using an appropriate scale to pick hyperparameters)
为超参数选择合适的范围 假设要选取隐藏单元的数量\(n^{[l]}\),假设,选取的取值范围是从50到100中某点,这种情况下,看到这条从50-100的数轴,可以随机在其取点,这是一个搜索特定超参数的 ...
- vue3中markRaw的使用
markRaw 作用:将一个对象标记为不可以被转化为代理对象.返回该对象本身. 应用场景: 1.有些值不应被设置成响应式时,例如复杂的第三方类库等 2.当渲染具有不可变数据源的大列表时,跳过响应式转换 ...
- 【小测试】玩一玩 VictoriaMetrics 的 force merge
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 我是期望通过备份来建立 VictoriaMetrics 的 ...
- 程序员必备!10款实用便捷的Git可视化管理工具
前言 俗话说得好"工欲善其事,必先利其器",合理的选择和使用可视化的管理工具可以降低技术入门和使用的门槛.我们在团队开发中统一某个开发工具的使用能够大大降低沟通成本,提高协作沟通效 ...
- StackFrame和StackTrace在Unity和C#中的区别
本文通过实际例子来看看StackFrame和StackTrace有什么区别,分别在.NET和Unity中测试. .NET环境 测试代码 using System; using System.Diagn ...
- 解决Edge浏览器提示“此网站已被人举报不安全”
今天下午微软旗下的 Microsoft Edge 浏览器将百度搜索的跳转域名 (*.baidu.com/link?url=*) 封杀,百度搜索首页可以打开,但搜索任何关键词点击搜索结果都会被拦截. 当 ...