1 什么是共享库
其实也就是流水线在执行的时候所需要使用到的功能函数,也就是将所有的逻辑放在共享库里面。
共享库一般放在git上面,在git上面创建项目。然后按照共享库的结构去创建仓库,共享库这里是公用的仓库。
2 sharelibrary共享库结构
src 目录类似于标准的Java源目录结构。当执行流水线时,该目录被添加到类路径下
vars 目录定义可从流水线访问的全局变量的脚本。 每个 *.groovy 文件的基名应该是一个 Groovy (~ Java) 标识符, 通常是 camelCased。 匹配 *.txt, 如果存在, 可以包含文档, 通过系统的配置标记格式化从处理 (所以可能是 HTML, Markdown 等,虽然 txt 扩展是必需的)。
这些目录中的Groovy 源文件 在脚本化流水线中的 "CPS transformation" 一样。
resources 目录允许从外部库中使用 libraryResource 步骤来加载有关的非 Groovy 文件。 目前,内部库不支持该特性。
根目录下的其他目录被保留下来以便于将来的增强。注:src目录必须存在,其他可以没有
3 gitlab配置
3.1 新建项目jenkinslib
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里面也可以导入若干个共享库。
主要配置有两步,一是取别名,二是定义好它的版本
4.3 新建流水线工程
配置参数
配置脚本
#!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)
4.4 点击运行
其实可以看到也会去gitlab上面加载共享库,之后去下载共享库。
4.5 颜色输出
4.6 blue ocean输出
4.7 报错处理
java.lang.NoSuchMethodError: No such DSL method 'ansiColor' found among steps
安装插件ansiColor
报错哪个方法找不到,就到插件那里去搜,缺少插件引起