35-Jenkins-共享库应用

Posted 爱学习de测试小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了35-Jenkins-共享库应用相关的知识,希望对你有一定的参考价值。

共享库应用


前言

  • 本篇来学习Jenkins中使用共享库

使用共享库原因

  • 由于流水线被组织中越来越多的项目所采用,常见的模式很可能会出现。 在多个项目之间共享流水线有助于减少冗余并保持代码
  • 共享库目录结构
(root)
+- src                     # Groovy source files
|   +- org
|       +- foo
|           +- Bar.groovy  # for org.foo.Bar class
+- vars
|   +- foo.groovy          # for global 'foo' variable
|   +- foo.txt             # help for 'foo' variable
+- resources               # resource files (external libraries only)
|   +- org
|       +- foo
|           +- bar.json    # static helper data for org.foo.Bar
  • src目录类似于标准Java源目录结构。执行流水线时,此目录将添加到类路径中。
  • vars目录托管脚本文件,这些脚本文件在“管道”中作为变量公开。
  • resources目录允许1ibraryResource从外部库中使用步骤来加载相关联的非Groovy文件。

定义共享库

  • 目录: src/org/devops/tools.groovy
pacakge org.devops  // 不可省略

//打印信息
def PrintMsg(msg)
    println(msg)


//带颜色打印信息  需安装ansiColor插件
def Post(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])
    

  • 目录:src/org/devops/GlobalVars.groovy
package org.devops //这里指定文件所在目录位置

class GlobalVars  //名称要和文件名一致
    static String name = "大海"
    static int  age = 28
    static String city = "北京"

  • 目录:vars/sayHello.groovy
def call(String name) 
    echo "Hello, $name!"

  • 目录:vars/log.groovy
def info(message) 
    echo "INFO: $message"


def warning(message) 
    echo "WARNING: $message"

使用共享库

1. 配置共享库

  • Manage Jenkins --> Configure System -->-Global Pipeline Libraries
  • Name :共享库的唯一标识,在Jenkinsfile中会使用到。.
  • Default version :默认版本。可以是分支名、tag标签等。
  • Load implicitly:隐式加载。如果勾选此项,将自动加载全局共享库,在Jenkinsfile中不需要显式引用,就可以直接使用。
  • Allow default version to be overridden :如果勾选此项,则表示允许“Default version”被Jenk-insfile中的配置覆盖。
  • lnclude@Library changes in job recent changes:如果勾选此项,那么共享库的最后变更信息会跟项目的变更信息一起被打印在构建日志中。
  • Retrieval method:获取共享库代码的方法。我们选择LegacySCM”选项,进而选择使用Git仓库配置共享库

2. Pipeline中使用

@Library('myShareLib@JenkinsShareLib') _  // _ 不可省略 

import org.devops.GlobalVars

def mytools = new org.devops.tools()

 
pipeline 
	agent any
	stages 
		stage("hello")
			steps
				script
                    mytools.Post("This is ShareLib",'green')
                    println "$GlobalVars.name"
                    println "$GlobalVars.age"
                    println "$GlobalVars.city"
				
			
		
		stage("world")
			steps
				script
                    mytools.PrintMsg("This is ShareLib")
                    sayHello('大海')
                    log.info 'Starting'
                    log.warning 'Nothing to do!'
				
			
		
	

  • @Library(‘global-shared-library@’)_
  • <version>可以是:
    • 分支,如@Library ( ‘global-shared-library@dev’)。
    • tag标签,如@Library ( ‘myShareLib@release1.0’ )
    • git commit id,如@Library ( ‘global-shared-library@xxxxxxxxxxxx’)
  • 因为Jenkins支持同时添加多个共享库,所以@Library注解还允许我们同时引入多个共享库,如:@Library ( [‘global-shared-library’ , 'otherlib@abc1234])。

以上是关于35-Jenkins-共享库应用的主要内容,如果未能解决你的问题,请参考以下文章

Linux 共享库

linux共享库支持多线程应用回调

如何为非 Qt 应用程序创建 Qt 共享库

Linux 共享库被加载两次

我的docker随笔35:jenkins服务部署

我的docker随笔35:jenkins服务部署