1 什么是共享库

sharelibrary共享库_共享库

其实也就是流水线在执行的时候所需要使用到的功能函数,也就是将所有的逻辑放在共享库里面。

共享库一般放在git上面,在git上面创建项目。然后按照共享库的结构去创建仓库,共享库这里是公用的仓库。

2 sharelibrary共享库结构

sharelibrary共享库_git_02

src 目录类似于标准的Java源目录结构。当执行流水线时,该目录被添加到类路径下

vars 目录定义可从流水线访问的全局变量的脚本。 每个 *.groovy 文件的基名应该是一个 Groovy (~ Java) 标识符, 通常是 camelCased。 匹配 *.txt, 如果存在, 可以包含文档, 通过系统的配置标记格式化从处理 (所以可能是 HTML, Markdown 等,虽然 txt 扩展是必需的)。

这些目录中的Groovy 源文件 在脚本化流水线中的 "CPS transformation" 一样。

resources 目录允许从外部库中使用 libraryResource 步骤来加载有关的非 Groovy 文件。 目前,内部库不支持该特性。

根目录下的其他目录被保留下来以便于将来的增强。注:src目录必须存在,其他可以没有

3 gitlab配置

3.1 新建项目jenkinslib

sharelibrary共享库_加载_03

3.2 将文件推送到代码仓

1、/src/org/devops/tools.groovy
package org.devops
//格式化输出
def PrintMes(value,color){
    colors = ['red'   : "\033[40;31m >>>>>>>>>>>${value}<<<<<<<<<<< \033[0m",
              'blue'  : "\033[47;34m ${value} \033[0m",
              'green' : "\033[1;32m >>>>>>>>>>${value}>>>>>>>>>> \033[0m",
              'green1' : "\033[40;32m >>>>>>>>>>>${value}<<<<<<<<<<< \033[0m" ]
    ansiColor('xterm') {
        println(colors[color])
    }
}

2、/vars/hello.groovy
def call(){
    println("hello")
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

4 Jenkins配置

4.1 jenkins安装依赖

Timestamper 供options下面的timestamps()  //日志会有时间调用
Blue Ocean
  • 1.
  • 2.

4.2 全局配置

首先,我们为共享库设置一个名称 jenkinslib (自定义,无需与gitlab仓库一致),注意这个名称后续在Jenkinsfile中引用。 再设置一个默认的版本,这里的版本是分支的名称。(github默认版本是master)

这里可以定义若干个共享库,pipeline里面也可以导入若干个共享库。

主要配置有两步,一是取别名,二是定义好它的版本

sharelibrary共享库_加载_04

sharelibrary共享库_加载_05

4.3 新建流水线工程

配置参数

sharelibrary共享库_共享库_06

配置脚本

#!groovy
@Library('jenkinslib') _
def tools = new org.devops.tools()
hello()
String workspace = "/opt/jenkins/workspace"
//Pipeline
pipeline {
  agent {
    node {
      label "built-in"   //指定运行节点的标签或者名称
      customWorkspace "${workspace}"   //指定运行工作目录(可选)
    }
  }
  options {
    timestamps()  //日志会有时间
    skipDefaultCheckout()  //删除隐式checkout scm语句
    disableConcurrentBuilds() //禁止并行
    timeout(time: 1, unit: 'HOURS')  //流水线超时设置1h
  }
  stages {
    //下载代码
    stage("GetCode"){ //阶段名称
      when { environment name: 'test', value: 'abcd' }
      steps{  //步骤
        timeout(time:5, unit:"MINUTES"){   //步骤超时时间
          script{ //填写运行代码
            println('获取代码')
            tools.PrintMes("获取代码01",'red')
			      tools.PrintMes("获取代码02",'blue')
			      tools.PrintMes("获取代码03",'green')
			      tools.PrintMes("获取代码04",'green1')
            println("${test}")
            input id: 'Test', message: '我们是否要继续?', ok: '是,继续吧!', parameters: [choice(choices: ['a', 'b'], name: 'test1')], submitter: 'admin'
          }
        }
      }
    }
    stage("01"){
      failFast true
      parallel {
        //构建
        stage("Build"){
          steps{
            timeout(time:20, unit:"MINUTES"){
              script{
                println('应用打包')
                mvnHome = tool "maven3.6.2"
                println(mvnHome)
                sh "${mvnHome}/bin/mvn --version"
              }
            }
          }
        }
        //代码扫描
        stage("CodeScan"){
          steps{
            timeout(time:30, unit:"MINUTES"){
              script{
                print("代码扫描")
              }
            }
          }
        }
      }
    }
  }
  //构建后操作
  post {
    always {
      script{
        println("always")
      }
    }
    success {
      script{
        tools.PrintMes("构建成功",'red') 
      }
    }
    failure {
      script{
        tools.PrintMes("构建失败",'blue') 
      }
    }
    aborted {
      script{
        tools.PrintMes("构建取消",'green1')
      }
    }
  }
}

在Jenkinsfile中使用@Library("mylib") _ 来加载共享库,注意后面符号_用于加载。
类的实例化:   def mytools = new org.devops.tools()
使用类中的方法:  mytools.PrintMsg(msg)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.

sharelibrary共享库_git_07

4.4 点击运行

其实可以看到也会去gitlab上面加载共享库,之后去下载共享库。

sharelibrary共享库_git_08

sharelibrary共享库_git_09


4.5 颜色输出

sharelibrary共享库_git_10

sharelibrary共享库_git_11

4.6 blue ocean输出

sharelibrary共享库_git_12

4.7 报错处理

java.lang.NoSuchMethodError: No such DSL method 'ansiColor' found among steps
安装插件ansiColor
报错哪个方法找不到,就到插件那里去搜,缺少插件引起
  • 1.
  • 2.
  • 3.