简单使用

共享库(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. [转帖]sqlplus与shell互相传值的几种情况

    https://www.cnblogs.com/youngerger/p/9068888.html sqlplus与shell互相传值的几种情况 情况一:在shell中最简单的调用sqlplus $c ...

  2. [转帖]RPC 框架架构设计

    github地址:https://github.com/xiaojiesir/mini-rpc RPC 又称远程过程调用(Remote Procedure Call),用于解决分布式系统中服务之间的调 ...

  3. [转帖]使用Linux命令快速查看某一行

      原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 当年,我还是Linux菜鸟的时候,就在简历上写着精通Linux命令了,而当面试官问我"如何快速查看 ...

  4. Linux上面批量更新SQLSERVER SQL文本文件的办法

    1. 今天同事让帮忙更新几个SQL文件.. 本着自己虽然low 但是不能太low的想法, 简单写一个 shell 脚本来执行. 2. 因为我的linux 里面都安装了 sqlcmd 的工具 所以办法就 ...

  5. with(上下文管理器)的用法

    with语句可以自动管理上下文资源,不论什么原因(成功或失败)跳出with语句,都能保证文件正确关闭,并 释放资源,不用手动去close掉资源 1.with语句中有两个内置方法__enter__和__ ...

  6. &&运算提高代码质量

    sendGiveWeb: { code: 200, success: true, data: [ { id: "1230", name: "lh" }, { i ...

  7. MySQL数据库精选(从入门使用到底层结构)

    基本使用MySQL 通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库.表.字段) DML: 数据操作语言,用来对数据库表中的数据进行增删改 DQL: 数据查询语言,用来查询数据库中表 ...

  8. 新建立git分支,之后将分支合并到master上

    1.打开PowerShell 进入解决方案中的文件夹中,并列出目前远程的所有分支 命令:git branch -a 2.从远程获取最新版本到本地 命令:git fetch --all 3.使本地代码与 ...

  9. 从零开始配置 vim(5)——本地设置与全局设置

    在前面的一系列文章中,我们介绍了使用 :noremap 进行键盘映射,使用 set 来设置选项和 vim 的变量.并且已经在配置文件中对他们进行了相关配置. 在介绍设置那一篇文章中我们提到了,lua ...

  10. C/C++ 实现获取Linux系统参数

    今天忙活了半天,在Linux平台下,总算可以获取到一些性能指标了,结果,Linux上面的数据发送到Windows上面会出现发送为空的现象,可能是Socket套接字存在问题,不搞了. #include ...