惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
N
Netflix TechBlog - Medium
The Register - Security
The Register - Security
aimingoo的专栏
aimingoo的专栏
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园 - 司徒正美
The Cloudflare Blog
GbyAI
GbyAI
IT之家
IT之家
A
About on SuperTechFans
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
U
Unit 42
美团技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Martin Fowler
Martin Fowler
F
Full Disclosure
B
Blog RSS Feed
F
Fortinet All Blogs
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
The Blog of Author Tim Ferriss
WordPress大学
WordPress大学
J
Java Code Geeks
G
Google Developers Blog
Jina AI
Jina AI
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
有赞技术团队
有赞技术团队
L
LangChain Blog
博客园 - 三生石上(FineUI控件)
Engineering at Meta
Engineering at Meta
宝玉的分享
宝玉的分享
H
Help Net Security
月光博客
月光博客
雷峰网
雷峰网
D
Docker
Vercel News
Vercel News
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
Stack Overflow Blog
Stack Overflow Blog
Apple Machine Learning Research
Apple Machine Learning Research
Y
Y Combinator Blog
小众软件
小众软件
博客园 - 聂微东
爱范儿
爱范儿
D
DataBreaches.Net

博客园 - 久曲健

我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 我帮你测过了,测试圈排名第一的 Skill 果然牛逼 AI测试不是工具升级,是思维革命:从OpenClaw看测试工程师的生死劫 OpenAI卸载量暴增295%,Claude登顶第一:AI竞争进入价值观分层时代 当测试自动化率达到80%,测试工程师还剩下什么? AI渗透测试工具:从"脚本跑腿"到"Agent大脑"的范式革命 2026年AI测试工具评测:谁在解决问题,谁在割韭菜? 被这些测试框架坑过?我的选型避坑指南 LLM应用测试,终于有了趁手武器?深度评测Product Hunt爆火的LLM Testing Tool 当Claude Code负责人说"编程已解决",测试工程师该慌吗? 4步搞定!人人都能拥有18岁OpenClaw AI女友Clawra 无套路分享|我自用的全套自学视频 + 资料,网盘直接领 某豪猪发的 “跑通了!Deepseek 自动生成测试用例,太牛了!”,看起来好像很厉害的样子! 智驾“内卷”下的压力下:车企如何以AI测试抢占车机质效高地 Jenkins Share Library教程 —— 企业级 Jenkins Shared Library 实战示例 测试人请查收:金融级系统“三高”挑战下的AI测试工具栈与技术内幕 Jenkins Share Library教程 —— 高级实战与最佳实践教程 记一次AI Agent开发的思维误区 向量数据库 Chroma 和 Milvus的使用
Jenkins Share Library教程 —— 开发入门
久曲健 · 2025-10-13 · via 博客园 - 久曲健

写在前面

今日心情有点小丧,但总体问题不大,有一些突然来的活,还没整完,明天再继续搞把。

有难度吗?

有一些把,我觉得还是要做一些自己不擅长的工作,才会有成长的吧,为什么?

用我们测试同学的话术,就是提升“自己”的“测试覆盖率”,即解决问题的能力,核心就是会了就是赚了!

学习目标

通过本教程,你将学会:

✅ 理解 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()}"
      }
    }
  }
}

运行后,你会在控制台输出看到:

image


九、共享库版本管理

在企业项目中,你通常会:

  • 使用 Git tag 来发布共享库版本(例如 v1.0.0
  • 在 Jenkinsfile 中固定使用特定版本:
@Library('my-shared-lib@v1.0.0') _

这样能防止库更新影响旧项目。


恭喜你 ,到此Jenkins Share Library开发就算入门了。

写在最后

改一改自己懒惰的毛病,学起来,顺便也锻炼下自己的写作能力,没有什么华丽的辞藻了,只剩下热诚地坚持了!

最后,感谢您的观看,如文章对您有帮助,老规矩,点赞转发就哦了,如有疑问,欢迎文末留言交流!