Jenkins 进阶01 共享库share Library封装常用模块

网友投稿 1717 2022-11-30

Jenkins 进阶01 共享库share Library封装常用模块

Jenkins共享库实践

共享库这并不是一个全新的概念,其实在编程语言Python中,我们可以将Python代码写到一个文件中,当代码数量增加,我们可以将代码打包成模块然后再以import的方式使用此模块中的方法。

在Jenkins中使用Groovy语法,共享库中存储的每个文件都是一个groovy的类,每个文件(类)中包含一个或多个方法。每个方法包含groovy语句块。

创建共享库,共享库的目的就是将一些反复使用的模块进行封装,比如拉取代码模块,邮件通知模块,这样使得你的Jenkinsfile看起来更加简洁,减少代码量。

可以在Git等版本控制系统中创建一个项目用于存储共享库。共享流水线有助于减少冗余并保持代码整洁。

总结就是将所有的工具以共享库的方式封装起来

属性

共享库名称共享库版本共享库地址

├── src│ └── org│ └── devops│ └── tools.groovy├── vars│ └── GetHosts.groovy│ └── GetCommitId.groovy│ └── resources│ └── org│ └── devops│ └── config.json

gitlab上面创建共享仓库(封装常用的函数代码块)

共享库内容分析

builds.groovy 存放构件相关的代码配置

这里面定义了一个​​Build​​​ 函数, 接受两个参数​​buildTools​​​ 和​​buildType​​​ , 前者定义的是一个构建工具的位置map,后者是定义的构建类型例如​​maven/ant/gradle/web/golang​​ 。代码主体是根据不同的构建类型执行不同的构建命令,默认打印信息。

package org.devops// 构建函数def Build(buildTools,buildType){ switch(buildType){ case "maven": sh "${buildTools["maven"]}/bin/mvn clean package" break case "gradle": sh "${buildTools["gradle"]}/bin/gradle build -x test" break case "golang": sh "${buildTools["golang"]}/bin/go build demo.go" break case "web": sh """ ${buildTools["web"]}/bin/npm install && ${buildTools["web"]}/bin/npm run build """ break default : println("buildType ==> [maven|gralde|golang|web]") break }}

mytools.groovy用于存放一些小工具, 这里定义了 ​​GetCode​​ 函数用于-代码,接受三个参数:

​​srcType​​ 代码库类型(git/svn)branchName 代码库的分支名称gitHttpURL 代码库的地址credentialsId 存放凭据ID

​​EmailUser​​ 函数用于发送邮件通知, 接受两个参数:

userEmail  邮件接收人(多个使用逗号分隔)status 作业状态(成功、失败)

创建mytools.groovy

以后把所有的工具都放在这里面

mytools.groovy里面内容。封装的拉取代码和邮件通知

package org.devopsdef GetCode(srcType,branchName,gitHttpURL,credentialsId){ if (srcType == "git"){ println("-代码 --> 分支: ${branchName}") checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${credentialsId}", url: "${gitHttpURL}"]]]) }}def EmailUser(userEmail,status){ emailext body: """
构建信息

""", subject: "Jenkins-${JOB_NAME}项目构建信息 ", to: userEmail}

最近共享库目录结构如下

配置共享库到Jenkins

Jenkins系统配置 -> Global Pipeline Libraries

首先,我们为共享库设置一个名称 ​​devopslib​​ (自定义,无需与github仓库一致),注意这个名称后续在Jenkinsfile中引用。 再设置一个默认的版本,这里的版本是分支的名称。我默认配置的是​​main​​版本。(github默认版本必须是main)

进入Jenkins 设置, 定义共享库名称 ​​devopslib​​​  默认的版本 ​​master​​ 。

接下来我们配置共享库的仓库地址,我的仓库在github中,所以这里我填写的是github的方式。(如果你用的是gitlab可以使用gitlab方式或者git方式)。如果仓库是私有的方式,需要在jenkins的凭据中添加一个账号用于-共享库。

设置共享库的Git地址 , 设置共享库的凭据。(如果没有提前创建好凭据,需要先去创建好然后再重新配置这个页面。)

保存设置,共享库就配置好了。

测试共享库

在Jenkinsfile中使用​​@Library('mylib') _ ​​来加载共享库,注意后面符号​​_​​用于加载。

类的实例化:   ​​def mytools = new org.devops.jenkinstest()​​

使用类中的方法:  mytools.PrintMsg(msg)

Jenkinsfile内容如下所示

// 加载名称为devopslib的共享库的master版本@Library("devopslib@master") _//导入共享库中的方法类def mytools = new org.devops.mytools()def builds = new org.devops.builds()//定义构建工具类型与路径mapdef buildTools = [ "maven": "/usr/local/apache-maven-3.8.1", "gradle": "/usr/local/gradle-6.8.3/", "golang": "/usr/local/go", "web" : "/usr/local/node-v14.16.1-linux-x64/"]//定义UI上面的参数(用户去选择构建那个项目的那个分支的构建类型)String branchName = "${env.branchName}"String gitHttpURL = "${env.gitHttpURL}"String buildType = "${env.buildType}"String credentialsId = "${env.credentialsId}"// 以下是流水线阶段pipeline { agent { label "build" } options { skipDefaultCheckout true } stages { stage("GetCode"){ steps{ script{ // 调用GetCode方法进行代码- mytools.GetCode("git",branchName,gitHttpURL,credentialsId) } } } stage("Build"){ steps { script { // 调用Build方法进行代码构建 builds.Build(buildTools, buildType) } } } } post { always { script{ echo "always......" } } success { script { echo "success....." } } }}

最后构建如下

我这里用的是docker注意git的版本,docker jenkins容器里面自带的git的版本是1.18版本,先宿主机升级然后挂载到容器目录下使用

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Jenkins 常用的项目构建工具集成 04 npm yarn
下一篇:SonarQube 02 插件安装以及配置scanner
相关文章

 发表评论

暂时没有评论,来抢沙发吧~