如何使用共享库改进 Jenkins 构建
作者:互联网
先决条件
安装詹金斯
Linux
Jenkins - 一个开源自动化服务器,使世界各地的开发人员能够可靠地构建、测试和……
www.jenkins.io
什么是共享库?
Jenkins 中的共享库是可重用的 Groovy 脚本集合,可供多个 Jenkins 作业使用。这允许您在不同作业之间共享代码和功能,这可以使您的构建更高效且更易于维护。
为了理解共享库的概念,让我们考虑一个实时示例。想象一下,您有多个 Jenkins 管道,需要一组通用的函数来与版本控制系统(例如 Git)进行交互。您可以创建一个封装必要的 Git 操作的共享库,而不是在每个管道中重复与 Git 相关的代码。
共享库的文件夹结构
共享库中使用的文件夹结构
该src目录的结构类似于标准 Java 项目。这意味着您可以使用该import语句从目录中的其他目录导入类src。
该vars目录是一个特殊目录,包含共享库中定义的全局变量。可以从导入共享库的任何 Jenkins 作业访问这些变量。
该resources目录是一个常规目录,可以包含任何类型的文件。但是,它通常用于存储共享库使用的静态资源。
在 Jenkins 中配置共享库的步骤
在任何源代码管理工具中创建存储库。
这里我们使用的是GitHub。
克隆新创建的存储库
git 克隆 https://github.com/tejashreeSalvi/shared-lib.git克隆https://github.com/tejashreeSalvi/shared-lib.git
创建文件夹结构
cd share-lib
# 创建 master 分支(可选)
gitbranch master
git checkout master
# 创建 vars 目录
mkdir vars
cd vars
我们已经创建了vars要在其中编写可重用函数的目录。
让我们考虑一个实时示例。想象一下,您有多个 Jenkins 管道,需要一组通用的函数来与版本控制系统(例如 Git)进行交互。您可以创建一个封装必要的 Git 操作的共享库,而不是在每个管道中重复与 Git 相关的代码。
创建您的第一个共享库以签出 scm。
checkoutCode.groovy
def call(String repoUrl, Stringbranch){字符串repoUrl,字符串分支){
defworkingDir = “ ${env.WORKSPACE} ”
sh “git克隆${repoUrl} ${workingDir} ”
sh “git checkout ${branch} ”
返回workingDir
}
该call方法是 Jenkins 共享库中的一个特殊方法,允许从 Jenkins 管道直接调用该函数。
${env.WORKSPACE}分配 Jenkins 环境变量WORKSPACE
sh用于执行 shell 命令以将 中的存储库克隆workingDir并签出(切换)到指定的branch.
该路径workingDir返回到 Jenkins Pipeline。
可以在导入和使用共享库的 Jenkins 管道中重用此功能。
将您的更改提交到 Git 存储库。
git 添加 . 添加。
git commit - m“添加了 checkout scm 功能”
git Push origin master
代码已成功推送并可在远程存储库中使用。
在 Jenkins 中配置全局管道库(共享库)
登录詹金斯。
前往Manage Jenkins→Configure System
下一步,搜索Global Pipeline Libraries并配置参数。
输入共享库名称:shared-lib
设置默认分支:(master如果导入共享库时没有指定分支,Jenkins将考虑默认分支)。
3. 配置我们为共享库创建的存储库:https://github.com/tejashreeSalvi/shared-lib.git
Shared-lib,Jenkins 共享库,下载shared-lib的源码_GitHub_酷徒
詹金斯共享库。通过在 GitHub 上创建帐户来为 tejashreeSalvi/shared-lib 开发做出贡献。
github.com
4. 如果您的存储库是私有的,请配置凭据
5. 单击Save
哇!我们已经完成了配置部分。
让我们在管道中使用共享库
为了导入库,我们使用@Library注释并指定 Jenkins 全局配置中定义的库名称。
创建 Jenkins 管道
转到New Item 并给出合适的管道名称first-shared-lib-pipeline和类型pipeline
点击OK
用于导入共享库的脚本
转到Pipeline Script→ 添加脚本并Save
@Library( "shared-lib@master" ) _
pipeline {
代理任何
阶段 {
stage( 'Code Checkout' ) {
步骤 {
script {
defworkingDir = checkoutCode ( "https://github.com/tejashreeSalvi/django-todo- CICD.git" , "开发" ) echo
$workingDir
} }
} } }
@Library("shared-lib@master") _:这将在“master”分支导入名为“shared-lib”的共享库。该库可供 Jenkins 管道使用。
2. def workingDir = checkoutCode("https://github.com/tejashreeSalvi/django-todo-cicd.git", "develop"):此行checkoutCode从共享库调用函数,并传递存储库 URL 和分支名称。
因此,您可以创建多个管道并使用checkoutCode共享库中的函数来签出 scm。而不是在所有 Jenkins 管道中一次又一次地编写代码块。
建立管道。
前往first-shared-lib-pipeline→ 单击Build Now
将触发构建。检查构建的控制台输出。
仔细观察,你会发现共享库已经成功加载了。
通过使用共享库并调用该checkoutCode函数,该管道脚本通过克隆指定存储库并切换到分支来执行代码签出操作develop。