首页 > 其他分享 >4.4 Jenkins共享库应用

4.4 Jenkins共享库应用

时间:2024-07-09 13:30:12浏览次数:7  
标签:groovy 4.4 pipeline 代码 GlobalVars Jenkins 共享

由来与演进

在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在构建的时候会调用最新的共享库代码。

共享库是什么?

共享库(shared library)是一些独立的 Groovy 脚本的集合,我们可以在运行 Pipeline 的时候去获取这些共享库代码。使用共享库最好的方式同样是把代码使用 Git 仓库进行托管,这样我们就可以进行版本化管理了。当然我们也需要一些 Groovy 语言的基础,不过并不需要多深入,基本的语法概念掌握即可,可以查看前面我们的 Groovy 简明教程open in new window

使用共享库一般只需要3个步骤即可:

  • 首先创建 Groovy 脚本,添加到 Git 仓库中
  • 然后在 Jenkins 中配置将共享库添加到 Jenkins 中来
  • 最后,在我们的流水线中导入需要使用的共享库:@Library('your-shared-library'),这样就可以使用共享库中的代码了。

共享库内容

在共享库中一般会有两种通用的代码:

  • Steps:这些 Steps 在 Jenkins 中被称为全局变量,我们可以在所有的 Jenkins Pipeline 中使用这些自定义的 Steps。

比如,我们可以编写一个标准的 Step 来部署应用或者发送消息通知等,我们就可以将代码添加到 vars/YourStepName.groovy 文件中,然后实现一个 call 函数即可:

#!/usr/bin/env groovy
// vars/YourStepName.groovy

def call() {
  // Do something here...
}
 
  • 其他通用代码:我们可以在这里面添加一些帮助类,还可以定义整个流水线中使用的静态常量等。

这些代码需要放在 src/your/package/name 目录下面,然后就可以使用常规的 Groovy 语法了,例如:

#!/usr/bin/env groovy
// com/qikqiak/GlobalVars.groovy
package com.qikqiak

class GlobalVars {
   static String foo = "bar"
}
 

我们可以在 Jenkins Pipeline 中使用 import 导入上面的类,并引用其中的静态变量,比如 GlobalVars.foo

示例

新建一个名为 pipeline-library-demo 的文件夹,将该项目加入到 Git 仓库中。首先创建一个名为 vars 的目录,自定义一个 step 就是在 vars 目录下面的一个 .groovy 文件,这些被称为全局变量,比如我们添加一个 sayHi.groovy 的文件,代码如下所示:

#!/usr/bin/env groovy

def call(String name='QIKQIAK') {
  echo "Hello, ${name}."
}
 

需要注意的是需要实现 call 方法,添加了一个名为 name 的参数,具有默认值 QIKQIAK,可以用 ${name} 来进行访问。

然后创建一个名为 src/com/qikqiak/GlobalVars.groovy 的文件,文件内容如下所示:

#!/usr/bin/env groovy
package com.qikqiak

class GlobalVars {
  static String foo = "bar"

  // 在 Pipeline 中可以引用这里的静态变量:
  // 
  // import com.qikqiak.GlobalVars
  // println GlobalVars.foo
}
 

完整的代码目录如下所示:

$ tree .
.
├── README.md
├── src
│   └── com
│       └── qikqiak
│           └── GlobalVars.groovy
└── vars
    └── sayHi.groovy

4 directories, 3 files
 

完整的代码上传到了 GitHub 仓库 https://github.com/cnych/pipeline-library-demo 中。

共享库创建完成后,我们需要让 Jenkins 知道这个共享库,我们可以从 Jenkins 的 Web 页面进行添加。在 Jenkins 首页 -> 系统管理 -> 系统配置,在 Global Pipeline Libraries 区域配置共享库:

Global Pipeline LibrariesGlobal Pipeline Libraries

保存后即可使用配置共享库。接下来新建一个名为 share-lib-demo 的流水线项目,在 Pipeline script 区域添加如下代码:

@Library('pipeline-library-demo')_

import com.qikqiak.GlobalVars

stage('Demo') {
    echo 'Hello world'
    sayHi '阳明'
    println GlobalVars.foo
}
 

需要注意的是 @Library('pipeline-library-demo')_ 最后有一个下划线 _,这个下划线并不是写错了,如果 @Libray 后面紧接的一行不是 import 语句的话,就需要这个下划线,我们这里后面就是一条 import 语句,所以这里可以省略这个下划线。

配置完成后,构建这个 Pipeline,正常就可以看到如下所示的构建结果:

这样我们就完成了一个共享库的编写。

 

标签:groovy,4.4,pipeline,代码,GlobalVars,Jenkins,共享
From: https://www.cnblogs.com/david-cloud/p/18291613

相关文章

  • 2.2 war 包安装 jenkins
    war包安装jenkins参考:https://www.jenkins.io/doc/pipeline/tour/getting-started/要求:java8或java11下载jenkinswgethttp://mirrors.jenkins.io/war-stable/latest/jenkins.warwgethttps://mirrors.huaweicloud.com/jenkins/war/2.250/jenkins.war 运行jenkinsj......
  • 2.1 yum 安装 jenkins
    yum安装jenkins官方文档:https://pkg.jenkins.io/redhat-stable/http://mirrors.jenkins-ci.org/openinnewwindow可选择Jenkins长期支持版本或Jenkins每周版本进行安装。长期支持版本每12周从定期发布流中选择一个LTS(长期支持)openinnewwindow发布作为该时间段的稳定发......
  • 3.1 Jenkins用户权限管理
    Jenkins默认使用的是自带的数据库管理用户,支持同步LDAP、Github等认证集成。关于用户与权限管理是Jenkins比较弱的一点,当大规模授权的时候建议使用API接口授权,否则当你打开web页面授权时,会很乱加载缓慢,最终导致保存失败权限丢失。用户管理配置用户接入入口:系统管理->全局安......
  • 4.1 开始编写Jenkinsfile
    为什么使用pipeline?本质上,jenkins是一个自动化引擎,它支持许多自动模式。流水线向Jenkins添加了一组强大的工具,支持用例、简单的持续集成到全面的持续交付流水线。通过对一系列的发布任务建立标准的模板,用户可以利用更多流水线的特性,比如:代码化:流水线是在代码中实现的,通常会......
  • jenkins
    安装jenkins准备好jenkins服务器,建议配置至少4G、2C1.去清华源下载https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/2.下载好如下系列软件包即可[root@jenkins-100/opt]#lsjdk-8u181-linux-x64.rpmjenkins-2.190.1-1.1.noarch.rpmjenkins_plugins.tar.gz3.......
  • 1.2 Jenkins简介
    简单介绍Jenkinsopeninnewwindow前身是Hudson,Jenkins是一款开源CI&CD软件,基于Java开发,用于自动化各种任务,包括构建、测试和部署软件。Jenkins支持各种运行方式,可通过系统包、Docker或者通过一个独立的Java程序。Jenkins项目产生两个发行线,长期支持版本(LTS)和每......
  • Java计算机毕业设计校园共享单车系统的设计与实现(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高校规模的不断扩大和学生人数的增加,校园内的交通问题日益凸显。传统的自行车管理方式不仅效率低下,还存在车辆调度不灵活、租赁流程繁琐、车辆维......
  • 共享单车0元骑行无限羊毛玩法揭秘
    本文旨在分析共享单车在当前市场环境下的使用成本,并探讨如何通过合理策略实现经济性骑行。文章回顾了共享单车的发展历程,并对其价格变化进行了分析,同时提出了实现成本效益最大化的骑行策略。关键词:共享单车,经济性使用,成本效益,市场策略1.引言共享单车作为城市交通的补充,曾......
  • Ubuntu 22.04.4 LTS 安装 FreeRADIUS 3.0 和 Daloradius 2.2 搭建radius 认证服务器
    1ubuntu安装LAMP环境(安装nginx代替apache):Ubuntu22.04.4LTS安装phpapacheLAMP环境nginx-CSDN博客2安装freeradiussudoaptupdatesudoapt-getinstalllibmysqld-devsudoapt-getinstallfreeradius#先安装libmysqld-dev,否则启动可能报错Couldnotlink......
  • 轻松解决win7和win10共享打印机出现错误代码0x00000709的办法
    轻松解决win7系统共享打印机错误代码0x00000709的办法轻松解决win10系统共享打印机错误代码0x00000709的办法为了方便用户更方便充分的利用打印机,配置打印机共享功能,开启共享后可以查询到共享的打印机,但是点击选择连接时出现错误代码0x00000709,尝试了各种方法修改注册表等还......