【DevOps】第一章 Jenkins使用共享库

使用jenkins共享库

1、由来与演进

在Jenkins 1.x中,对于job的配置大多是基于图形界面的,也就是说,要在GUI页面手动设置相关的job参数。随着不同类型和用途的job越来越多,参数越来越复杂,难以有效地管理数量庞大的图形界面配置信息,也无法有效追踪和记录配置的更改。

在Jenkins 2.0中,基于Pipeline,用户可以在一个 JenkinsFile 中快速实现一个项目的从构建、测试以到发布的完整流程,灵活方便地实现持续交付。并且通过“pipeline script from SCM”方式,可以保存这个流水线的定义,进行版本化管理。

在实际使用中,一开始大都会制作一个尽可能通用的pipeline脚本样例,让搭建者只需要修改几个赋值参数就可以在项目中应用。但不可避免的是,不同的项目往往有不同的需求,随着定制化需求越来越多,加入了不同的功能实现代码,导致pipeline也会越来越复杂,可读性差,也不利于维护。而且随着pipeline数目不断的增多,将会发现同一类型和用途的pipeline,它们的很多功能其实是相同的,这时如果对某个功能做改动,往往需要更新数量众多的JenkinsFile。

针对pipeline的扩展和管理问题,共享库功能(Shared Libraries)应运而生。共享库可以将整个pipeline脚本的实现和复杂度封装到Shared Library中,在各种项目之间共享pipeline核心实现,减少冗余代码。也就是说,Shared Libraries的方式抽象了各种项目之间共享的代码(甚至整条完整的pipeline),有效降低了使用pipeline的复杂度。而且通过外部源代码控制(SCM)的方式,保证所有job在构建的时候会调用最新的共享库代码。

2、创建一个共享库

2.1 创建共享库

可以直接在github中创建一个公开类型的仓库,也可以创建私有类型的gitlab仓库,需要提前配置好仓库的认证凭据,这里使用gitlab创建了一个名为jenkinslib的项目作为共享库,并创建类文件和Jenkinsfile文件 /src/org/devops/tools.groovy 和Jenkinsfile:
在这里插入图片描述

2.2 定义类方法

如在tools.groovy中定义PrintMsg(msg)

pacakge org.devops
//打印信息
def PrintMsg(msg){
  println(msg)
}

2.3 Jenkinsfile引用类

在Jenkinsfile中使用 @Library(‘jenkinslib’) _ 来加载共享库,注意后面符号 _ 用于加载,类的实例化 def mytools = new org.devops.tools(),使用上面Groovy类文件中的方法 PrintMsg(msg),如下:

@Library('jenkinslib') _     
def tools = new org.devops.tools()
pipeline {
 
	agent { label  "master" }
 
	stages {
		stage("build"){
			steps{
				script{
					msg = "hello jenkins"
					tools.PrintMsg(msg)
				}
			}
		}
	}
}

3、在Jenkins中使用共享库

3.1 在Jenkins中配置共享库

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

jenkins配置->系统配置
在这里插入图片描述
在这里插入图片描述

3.2 在pipeline使用共享库

在pipeline使用共享库,流水线定义为 pipeline script from SCM方式,在URL中配置共享库的仓库地址,我的仓库在gitlab中,所以这里填写的是gitlab的项目地址,(如果你用的是github可以使用github方式),如果仓库是私有的方式,需要在jenkins的凭据中添加一个账号用于下载共享库。

在这里插入图片描述
在这里插入图片描述
保存Jenkins配置,执行pipeline,控制台输出:打印msg(hello Jenkins)
在这里插入图片描述

4、项目中定义的vars的作用

在这里插入图片描述
在这里插入图片描述

def call(){
    println("hello,test vars")
}

**hello在任意位置调用**

在这里插入图片描述

@Library('jenkinslib') _     
def tools = new org.devops.tools()

hello()
pipeline {
 
	agent any
	stages {
		stage("build"){
			steps{
				script{
					msg = "hello jenkins"
					tools.PrintMsg(msg)
				}
			}
		}
	}
}

在这里插入图片描述

5、日志彩色显示

示例:这里用到ansiColor插件,在Jenkins输出有颜色的日志信息
在这里插入图片描述

  • 流水线语法的生成
    在这里插入图片描述
ansiColor('xterm') {
    // some block
}

tools.groovy

pacakge org.devops
//带颜色打印信息
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])
    }
}

Jenkinsfile

@Library('jenkinslib') _     
def tools = new org.devops.tools()
pipeline {
 
	agent any
	stages {
		stage("hello"){
			steps{
				script{
					tools.Post("success",'green')
				}
			}
		}
	}
}

在这里插入图片描述

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅行者-Ylt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值