Jenkins Share Library教程 —— 開發入門
寫在前面
今日心情有點小喪,但總體問題不大,有一些突然來的活,還沒整完,明天再繼續搞把。
有難度嗎?
有一些把,我覺得還是要做一些自己不擅長的工作,才會有成長的吧,為什么?
用我們測試同學的話術,就是提升“自己”的“測試覆蓋率”,即解決問題的能力,核心就是會了就是賺了!
學習目標
通過本教程,你將學會:
? 理解 Jenkins Shared Library 是什么
? 創建自己的共享庫項目(Git 倉庫)
? 在 Jenkinsfile 中調用共享庫
? 實際運行一個示例流水線
? 能獨立維護公司內部的通用 Jenkins 函數
一、什么是 Jenkins Shared Library?
可以把 Jenkins 比喻成一個“廚師”,而 Shared Library 就是一份“菜譜合集”。
在沒有共享庫時,每個 Jenkinsfile 都要寫重復的步驟,比如:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean install'
}
}
stage('Test') {
steps {
sh 'mvn compile test'
}
}
}
}
幾百個項目要是都這樣寫的話,會非常麻煩。
于是我們可以把這些公共邏輯抽取出來放到一個“共享庫”里,以后只要一句話就能復用。
也就是可以直接通過方法實現調用:
@Library('my-shared-lib') _
pipeline {
agent any
stages {
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 any
stages {
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 any
stages {
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.example
class Utils {
static String getTimestamp() {
return new Date().format("yyyy-MM-dd HH:mm:ss")
}
}
然后在 Jenkinsfile 調用:
@Library('my-shared-lib') _
import org.example.Utils
pipeline {
agent any
stages {
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開發就算入門了。
寫在最后
改一改自己懶惰的毛病,學起來,順便也鍛煉下自己的寫作能力,沒有什么華麗的辭藻了,只剩下熱誠地堅持了!
最后,感謝您的觀看,如文章對您有幫助,老規矩,點贊轉發就哦了,如有疑問,歡迎文末留言交流!
優秀不夠,你是否無可替代
軟件測試交流QQ群:721256703,期待你的加入!!
歡迎關注我的微信公眾號:軟件測試君


浙公網安備 33010602011771號