Jenkins 简介 #
Jenkins是目前最流行的开源自动化服务器,广泛应用于持续集成和持续部署领域。它帮助开发团队自动化构建、测试和部署流程,提高软件开发效率。
什么是CI/CD? #
在深入了解Jenkins之前,先理解CI/CD的核心概念:
持续集成 (CI) #
持续集成是一种开发实践,要求开发者频繁地将代码集成到主干分支。每次集成都通过自动化的构建和测试来验证,从而尽早发现集成错误。
text
代码提交 → 自动构建 → 自动测试 → 结果反馈
CI的核心价值:
- 尽早发现集成问题
- 减少手动构建工作
- 提高代码质量
- 加快开发迭代速度
持续部署 (CD) #
持续部署是持续集成的延伸,将通过测试的代码自动部署到生产环境。
text
测试通过 → 自动部署 → 生产环境
CD的核心价值:
- 自动化部署流程
- 减少人为错误
- 加快发布速度
- 提高发布可靠性
Jenkins 发展历史 #
起源 #
text
2004年: Kohsuke Kawaguchi 创建 Hudson 项目
2011年: Oracle 收购 Sun,Hudson 社区分裂
2011年: Jenkins 从 Hudson 分离,成为独立项目
至今: Jenkins 成为最流行的 CI/CD 工具之一
版本演进 #
| 版本 | 特性 |
|---|---|
| Jenkins 1.x | 传统Job配置,自由风格项目 |
| Jenkins 2.x | Pipeline as Code,更好的用户体验 |
| Jenkins 2.x+ | Declarative Pipeline,Blue Ocean UI |
Jenkins 核心概念 #
Master(主节点) #
Jenkins主节点是核心服务器,负责:
- 处理HTTP请求
- 调度构建任务
- 管理配置和插件
- 提供Web界面
Agent(代理节点) #
代理节点执行实际的构建任务:
- 接收Master分配的任务
- 执行构建步骤
- 返回构建结果
Job(任务) #
任务是Jenkins中的执行单元:
- Freestyle Project:自由风格项目
- Pipeline:流水线项目
- Multi-configuration Project:多配置项目
- Folder:文件夹组织
Build(构建) #
构建是任务的一次执行:
- 包含执行日志
- 保存构建产物
- 记录构建状态
Executor(执行器) #
执行器是执行构建的线程:
- 每个节点可以有多个执行器
- 决定并发构建数量
Jenkins 架构 #
text
┌─────────────────────────────────────────────────────────────┐
│ Jenkins Master │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Web UI │ │ REST API │ │ CLI │ │
│ │ (用户界面) │ │ (接口服务) │ │ (命令行) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 核心组件 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │任务调度器│ │执行队列 │ │安全框架 │ │插件管理 │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 执行器 (Executors) │ │
│ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ │
│ │ │ #1 │ │ #2 │ │ #3 │ │ #4 │ │ │
│ │ └──────┘ └──────┘ └──────┘ └──────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 数据存储 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ 配置文件 │ │ 构建日志 │ │ 插件数据 │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Agent 1 │ │ Agent 2 │ │ Agent 3 │
│ (Linux) │ │(Windows) │ │ (macOS) │
│ │ │ │ │ │
│ ┌──────┐ │ │ ┌──────┐ │ │ ┌──────┐ │
│ │Exec 1│ │ │ │Exec 1│ │ │ │Exec 1│ │
│ │Exec 2│ │ │ │Exec 2│ │ │ │Exec 2│ │
│ └──────┘ │ │ └──────┘ │ │ └──────┘ │
└──────────┘ └──────────┘ └──────────┘
Jenkins 的优势 #
1. 开源免费 #
groovy
// 完全开源,可自由使用和修改
// 社区活跃,持续更新迭代
2. 丰富的插件生态 #
Jenkins拥有1800+插件,支持:
| 类别 | 示例插件 |
|---|---|
| 版本控制 | Git, SVN, Mercurial |
| 构建工具 | Maven, Gradle, npm |
| 云平台 | AWS, Azure, Kubernetes |
| 通知 | Email, Slack,钉钉 |
| 代码质量 | SonarQube, Checkstyle |
3. 流水线即代码 #
groovy
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building...'
}
}
stage('Test') {
steps {
echo 'Testing...'
}
}
stage('Deploy') {
steps {
echo 'Deploying...'
}
}
}
}
4. 分布式构建 #
groovy
pipeline {
agent {
label 'linux-node'
}
stages {
stage('Build') {
steps {
sh 'make build'
}
}
}
}
5. 跨平台支持 #
| 平台 | 支持方式 |
|---|---|
| Linux | 原生支持,推荐生产环境 |
| Windows | Windows Service安装 |
| macOS | 支持开发测试环境 |
| Docker | 官方Docker镜像 |
| Kubernetes | Helm Chart部署 |
应用场景 #
1. 持续集成 #
groovy
pipeline {
agent any
tools {
maven 'Maven 3.8'
jdk 'JDK 11'
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build') {
steps {
sh 'mvn clean compile'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
post {
always {
junit '**/target/surefire-reports/*.xml'
}
}
}
}
}
2. 持续部署 #
groovy
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'docker build -t myapp:${BUILD_NUMBER} .'
}
}
stage('Push') {
steps {
sh 'docker push myapp:${BUILD_NUMBER}'
}
}
stage('Deploy') {
steps {
sh 'kubectl set image deployment/myapp myapp=myapp:${BUILD_NUMBER}'
}
}
}
}
3. 自动化测试 #
groovy
pipeline {
agent any
stages {
stage('Unit Tests') {
steps {
sh 'npm test'
}
}
stage('Integration Tests') {
steps {
sh 'npm run test:integration'
}
}
stage('E2E Tests') {
steps {
sh 'npm run test:e2e'
}
}
}
}
4. 定时任务 #
groovy
pipeline {
agent any
triggers {
cron('H 2 * * *')
}
stages {
stage('Nightly Build') {
steps {
echo 'Running nightly build...'
}
}
}
}
Jenkins vs 其他CI/CD工具 #
| 特性 | Jenkins | GitHub Actions | GitLab CI | CircleCI |
|---|---|---|---|---|
| 部署方式 | 自托管 | 云托管 | 云/自托管 | 云托管 |
| 配置语言 | Groovy/YAML | YAML | YAML | YAML |
| 插件生态 | 1800+ | 中等 | 中等 | 有限 |
| 学习曲线 | 较高 | 低 | 中 | 低 |
| 免费使用 | 完全免费 | 有限额度 | 有限额度 | 有限额度 |
| 企业支持 | CloudBees | GitHub | GitLab | CircleCI |
| 分布式构建 | 原生支持 | 支持 | 支持 | 支持 |
| 容器支持 | Docker插件 | 原生 | 原生 | 原生 |
何时选择Jenkins? #
适合场景 #
- 需要完全控制CI/CD环境
- 复杂的构建流程和自定义需求
- 需要丰富的插件支持
- 企业内部部署要求
- 需要分布式构建能力
不太适合场景 #
- 小型团队,简单项目
- 希望快速上手,不想维护服务器
- 预算有限,无法投入运维资源
下一步学习 #
现在你已经了解了Jenkins的基本概念,接下来可以:
- Jenkins安装与配置 - 搭建Jenkins环境
- 第一个任务 - 创建你的第一个Job
- 界面与导航 - 熟悉Jenkins界面
小结 #
- Jenkins是最流行的开源CI/CD工具
- 支持持续集成和持续部署
- 拥有丰富的插件生态系统
- 支持Pipeline as Code
- 适合各种规模的项目和团队
最后更新:2026-03-28