
什么是共享库
共享库并不是一个全新的概念,平时我们在写python,java等语言的时候,会引用各种包,比如import xxx from xxx。这里引用的包,其实就和我们今天来学的共享库的一样的。
在Jenkins的共享库中使用Groovy的语法,共享库中存储了Groovy的各种类,每个文件又可以编写各种的方法。
我把这次用到共享库的示例,放在gitee上面,方便大家参考。
共享库的结构
今天我们来完成一个共享库的功能,一般来说,共享库的结构分为可以分为resource,src,vars。其结构如下:
── resource├── src│ └── org│ └── devops│ └── tools.groovy└── vars
resource可以放一下资源,比如我们部署Kubernetes或者docker的时候,可以把dockerfile放到里面。src是我们放Groovy代码的地方,我们可以建一个src.org.devops的路径,看起来是不是很像java的目录结构。vars,是用来放各种参数文件。当然,其实也不是只有这些,一层目录也可以放诸如doc等文件来放文档。这都根据实际的需要。
开始编写共享库
我们来编写一个共享库的库文件,和使用var文件夹放置一个变量,来演示共享库的基本用法
新建文件src/org/devops/tools.groovy, 在此我将这个文件定义为扩展工具类,和方法。我们这次主要目的是。让输出流水线输出日志的信息,带颜色,这样我们成功的信息可以是绿色,失败的可以是红色,更醒目一些。我们要写一个PrintMes()的方法,接受两个参数value和color。
注意:我们需要安装 插件
AnsiColor,这样才能使用ansiColor()方法,可以在片段生成器查看更多的用法。
在使用这个插件的时候我们可以点击一下插件,查看一下他的文档这里也基本给出了用法。
ansiColor('css') {sh "ls -al"}echo 'this will be rendered as-is'// multiple ansiColor steps within one pipeline are also supportedansiColor('vga') {echo '\033[42m\033[97mWhite letters, green background\033[0m'}
我们会发现在打印输出颜色的时候,和我们用shell时候的用法一样,没错,这里也是用的ANSI/VT100终端控制转义序列。
接下来我们编写我们的格式化输出的函数
package org.devops//格式化输出def PrintMes(value,color){colors = ['red' : "\033[40;31m >>>>>>>>>>>${value}<<<<<<<<<<< \033[0m",'blue' : "\033[47;34m ${value} \033[0m",'green' : "\033[40;32m >>>>>>>>>>>${value}<<<<<<<<<<< \033[0m" ]ansiColor('xterm') {println(colors[color])}}
然后我们在var路径下创建一个hello.groovy的文件,我们只输出一个hello
def call(){println("hello")}
使用共享库
首先我们在系统配置里找到 Global Pipeline Libraries
为共享库设置一个名称jenkins-sharelib-tools,注意这个名称是在Jenkinsfile中引用。再设置一个默认的版本,这里的版本是分支的名称。我默认配置的是main版本。
注意:这里共享库,可以配置多个,根据名字区分

接下来我们配置共享库的仓库地址。

下面我们来编写jenkinsfile
在Jenkinsfile中使用@Library('jenkins-sharelib-tools') _来加载共享库,注意后面符号_用于加载。类的实例化def tools = new org.devops.tools(),使用类中的方法tools.PrintMes("获取代码",'green')。
前面我们还创建了一个,var路径下的hello.groovy文件。我们可以直接在script中用hello.call()
#!groovy@Library('jenkins-sharelib-tools') _def tools = new org.devops.tools()pipeline {agent { node { label "master" }}stages {//下载代码stage("GetCode"){steps{timeout(time:5, unit:"MINUTES"){script{tools.PrintMes("获取代码",'green')hello.call()}}}}}}
然后我们创建一个pipeline,我们流水线的类型,选择Pipeline script from SCM。我们配置一个gitlab的仓库然后将jenkinsfile放入

注意, 我们在同一个仓库下可以添加多个jenkinsfile,可以用名字来区分,也可以建多个路径,比如我放到tools路径下面,就需要配置
./tools/Jenkinsfile.之前的共享库,其实也可以在org路径下,放多个文件,适用于不同的情况
接下来在你的Jenkins上面运行一下吧,测试一下是否能够看到带有绿色的文字呢?

我们可以看到颜色已经有了,hello也可以正常输出。
本文介绍了如何在Jenkins中创建和使用共享库,通过Groovy语法定义功能函数。共享库包含resource、src和vars目录,用于组织资源、代码和参数文件。示例中展示了如何编写一个`PrintMes`函数,实现彩色日志输出,并在Jenkinsfile中加载和调用共享库,以增强日志可读性。
797

被折叠的 条评论
为什么被折叠?



