简单使用

共享库(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. [转帖]如何使用 sed 命令删除文件中的行

    https://zhuanlan.zhihu.com/p/80212245 sed 命令是 Linux 中的重要命令之一,在文件处理方面有着重要作用.可用于删除或移动与给定模式匹配的特定行.-- Ma ...

  2. [转帖]linux系统下grub.cfg详解和实例操作

    linux系统下grub.cfg详解和实例操作 简介 grub是引导操作系统的程序,它会根据自己的配置文件,去引导内核,当内核被加载到内存以后,内核会根据grub配置文件中的配置,找到根分区所使用的文 ...

  3. [转帖]shell 实现行转列、列转行的几种方法

    目录 shell 实现行转列.列转行的几种方法 awk 行转列 xargs 行转列 tr 列转行 参考资料 shell 实现行转列.列转行的几种方法 awk 行转列 以空格为分隔符 awk -F &q ...

  4. Linux 下面删除指定日期之前文件的办法

    1. Linux 下面最近有一个需求 需要只更新2020年4月10号之后补丁的需求 2. rsync 能够拉取所有的补丁文件  没找到能够按照日期进行拉取的办法. 所以想了一个折中的办法 先拉取 再按 ...

  5. [转贴]loadrunner 场景设计-添加Unix、Linux Resources计数器

    loadrunner 场景设计-添加Unix.Linux Resources计数器   https://www.cnblogs.com/shouke/p/10158239.html 场景设计-添加Un ...

  6. 在K8S中,Pod重启策略有哪些?

    在Kubernetes(简称K8s)中,Pod的重启策略定义了当容器失败时kubelet如何处理.有三种主要的重启策略: Always: 这是默认的重启策略.如果设置了为"Always&qu ...

  7. chaincode中使用第三方库

    本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处. 在fabric的chaincode开发时,有时候需要用到第三方库提供的功能.这 ...

  8. 各大安卓模拟器的adb端口和使用对比

    在手游开发中,经常会使用模拟器来进行adb调试,本文列出了市面上主流模拟器的adb端口和使用对比. 模拟器ADB端口 市面上常见的模拟器连接ADB的端口列表: 网易MuMu模拟器 7555 夜神安卓模 ...

  9. 2.2 Windows驱动开发:内核自旋锁结构

    提到自旋锁那就必须要说链表,在上一篇<内核中的链表与结构体>文章中简单实用链表结构来存储进程信息列表,相信读者应该已经理解了内核链表的基本使用,本篇文章将讲解自旋锁的简单应用,自旋锁是为了 ...

  10. C/C++ 操作数组与指针笔记

    指针数组: #include <stdio.h> #include <stdlib.h> #include <string.h> void PrintInt() { ...