jenkinsfile文件编写 jenkinsfile groovy_jenkins

什么是共享库

共享库并不是一个全新的概念,平时我们在写python,java等语言的时候,会引用各种包,比如import xxx from xxx。这里引用的包,其实就和我们今天来学的共享库的一样的。

在Jenkins的共享库中使用Groovy的语法,共享库中存储了Groovy的各种类,每个文件又可以编写各种的方法。

我把这次用到共享库的示例,放在gitee上面,方便大家参考。

共享库的结构

今天我们来完成一个共享库的功能,一般来说,共享库的结构分为可以分为resourcesrcvars。其结构如下:

── 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()的方法,接受两个参数valuecolor

注意:我们需要安装 插件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 groovy_共享库_02

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

jenkinsfile文件编写 jenkinsfile groovy_共享库_03

下面我们来编写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文件编写 jenkinsfile groovy_共享库_04

注意, 我们在同一个仓库下可以添加多个jenkinsfile,可以用名字来区分,也可以建多个路径,比如我放到tools路径下面,就需要配置./tools/Jenkinsfile.之前的共享库,其实也可以在org路径下,放多个文件,适用于不同的情况

接下来在你的Jenkins上面运行一下吧,测试一下是否能够看到带有绿色的文字呢?

jenkinsfile文件编写 jenkinsfile groovy_jenkinsfile文件编写_05

我们可以看到颜色已经有了,hello也可以正常输出。