0
点赞
收藏
分享

微信扫一扫

sharelibrary共享库

ITWYY 2024-08-01 阅读 8

1 什么是共享库

sharelibrary共享库_git

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

共享库一般放在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")
}

4 Jenkins配置

4.1 jenkins安装依赖

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

4.2 全局配置

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

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

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

sharelibrary共享库_加载_04

sharelibrary共享库_共享库_05

4.3 新建流水线工程

配置参数

sharelibrary共享库_git_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)

sharelibrary共享库_git_07

4.4 点击运行

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

sharelibrary共享库_共享库_08

sharelibrary共享库_加载_09


4.5 颜色输出

sharelibrary共享库_共享库_10

sharelibrary共享库_git_11

4.6 blue ocean输出

sharelibrary共享库_加载_12

4.7 报错处理

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

举报

相关推荐

0 条评论