写在前面
今日心情有点小丧,但总体问题不大,有一些突然来的活,还没整完,明天再继续搞把。
有难度吗?
有一些把,我觉得还是要做一些自己不擅长的工作,才会有成长的吧,为什么?
用我们测试同学的话术,就是提升“自己”的“测试覆盖率”,即解决问题的能力,核心就是会了就是赚了!
学习目标
通过本教程,你将学会:
✅ 理解 Jenkins Shared Library 是什么
✅ 创建自己的共享库项目(Git 仓库)
✅ 在 Jenkinsfile 中调用共享库
✅ 实际运行一个示例流水线
✅ 能独立维护公司内部的通用 Jenkins 函数
一、什么是 Jenkins Shared Library?
可以把 Jenkins 比喻成一个“厨师”,而 Shared Library 就是一份“菜谱合集”。
在没有共享库时,每个 Jenkinsfile 都要写重复的步骤,比如:
pipeline {agent anystages {stage('Build') {steps {sh 'mvn clean install'}}stage('Test') {steps {sh 'mvn compile test'}}}
}
几百个项目要是都这样写的话,会非常麻烦。
于是我们可以把这些公共逻辑抽取出来放到一个“共享库”里,以后只要一句话就能复用。
也就是可以直接通过方法实现调用:
@Library('my-shared-lib') _
pipeline {agent anystages {stage('Build & Test') {steps {myPipeline.buildAndTest()}}}
}
这样,所有项目就能共享一套逻辑,方便统一管理和维护。
二、准备环境
你需要的环境
工具 | 说明 |
---|---|
Jenkins | 版本 >= 2.3(最好用 LTS) |
Git | 版本管理工具 |
一个 Git 仓库 | 用来存放共享库代码(GitHub / GitLab 都行) |
三、创建共享库项目
在你的 Git 仓库中新建项目,例如:
https://github.com/yourname/jenkins-shared-lib-demo
项目结构如下:
jenkins-shared-lib-demo/
├── vars/
│ └── helloWorld.groovy
├── src/
│ └── org/example/Utils.groovy
└── resources/└── templates/email.txt
四、编写第一个共享函数
新建文件:vars/helloWorld.groovy
def call(String name = 'Jenkins') {echo "Hello, ${name}! Welcome to Shared Library!"
}
解释:
vars/
目录下的每个.groovy
文件会自动变成一个全局函数。- 文件名
helloWorld.groovy
就对应函数名helloWorld()
def call(...)
是约定写法,表示默认执行逻辑。
五、在 Jenkins 中配置共享库
1️⃣ 打开 Jenkins → “系统管理” → “系统配置”
2️⃣ 滚动到 “Global Pipeline Libraries(全局流水线库)”
点击 “Add” 新建一条:
字段 | 值 |
---|---|
名称 | my-shared-lib (后面要引用这个名字) |
Default version | main (你的 Git 默认分支) |
Source Code Management | Git |
Repository URL | https://github.com/yourname/jenkins-shared-lib-demo.git |
保存。
六、在 Jenkinsfile 中使用
在你的项目 Jenkinsfile 写:
@Library('my-shared-lib') _
pipeline {agent anystages {stage('Say Hello') {steps {helloWorld('软件测试君')}}}
}
运行后,你会在控制台输出看到:
[Pipeline] echo
Hello, 软件测试君! Welcome to Shared Library!
恭喜!你已经完成了第一个共享库调用!
七、进阶示例(模块化封装)
创建一个更实用的函数,比如构建 Maven 项目:
📁 vars/buildApp.groovy
def call(Map config = [:]) {stage('Build') {sh 'mvn clean install'}stage('Test') {sh 'mvn compile test'}if (config.deploy == true) {stage('Deploy') {echo "Deploying to ${config.env ?: 'staging'}..."}}
}
然后 Jenkinsfile:
@Library('my-shared-lib') _
pipeline {agent anystages {stage('CI Flow') {steps {buildApp(env: 'prod', deploy: true)}}}
}
八、实践练习
练习 1:
编写一个 notifySlack.groovy
,当构建失败时自动通知 Slack。
提示:
def call(String message) {echo "Send Slack notification: ${message}"
}
练习 2:
在 src/org/example/Utils.groovy
编写工具类:
package org.exampleclass Utils {static String getTimestamp() {return new Date().format("yyyy-MM-dd HH:mm:ss")}
}
然后在 Jenkinsfile 调用:
@Library('my-shared-lib') _
import org.example.Utilspipeline {agent anystages {stage('Show Time') {steps {echo "Current time: ${Utils.getTimestamp()}"}}}
}
运行后,你会在控制台输出看到:
九、共享库版本管理
在企业项目中,你通常会:
- 使用 Git tag 来发布共享库版本(例如
v1.0.0
) - 在 Jenkinsfile 中固定使用特定版本:
@Library('my-shared-lib@v1.0.0') _
这样能防止库更新影响旧项目。
恭喜你 ,到此Jenkins Share Library
开发就算入门了。
写在最后
改一改自己懒惰的毛病,学起来,顺便也锻炼下自己的写作能力,没有什么华丽的辞藻了,只剩下热诚地坚持了!
最后,感谢您的观看,如文章对您有帮助,老规矩,点赞转发就哦了,如有疑问,欢迎文末留言交流!