共享库并不是一个全新的概念,平时我们在写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 supported
ansiColor('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也可以正常输出。