第一章:Jenkins 简介¶
什么是 Jenkins?¶
Jenkins 是一个开源的自动化服务器,用于自动化软件开发过程中的各种任务,包括构建、测试和部署。它是最广泛使用的 CI/CD 工具之一。
CI/CD 概念¶
持续集成(CI)¶
持续集成是一种开发实践,开发者频繁地将代码集成到主干分支。每次集成都通过自动化的构建和测试来验证,从而尽早发现集成错误。
CI 的核心实践: - 频繁提交代码 - 自动化构建 - 自动化测试 - 快速反馈
持续部署(CD)¶
持续部署是 CI 的延伸,将代码自动部署到生产环境。
CD 的核心实践: - 自动化部署流程 - 环境一致性 - 回滚机制 - 监控与告警
Jenkins 特点¶
1. 开源免费¶
Jenkins 是完全开源的,基于 MIT 许可证,可以免费使用和修改。
2. 插件生态¶
Jenkins 拥有超过 1800 个插件,支持各种工具和平台:
- 版本控制:Git、SVN、Mercurial
- 构建工具:Maven、Gradle、npm
- 云平台:AWS、Azure、Kubernetes
- 测试工具:JUnit、Selenium、SonarQube
- 通知:Slack、Email、钉钉
3. 分布式构建¶
Jenkins 支持分布式构建,可以在多台机器上并行执行任务:
┌─────────────┐
│ Master │
│ (调度器) │
└──────┬──────┘
│
┌────┴────┬─────────┐
│ │ │
┌─▼──┐ ┌──▼──┐ ┌──▼──┐
│Agent│ │Agent│ │Agent│
│Linux│ │Win │ │Mac │
└─────┘ └─────┘ └─────┘
4. Pipeline as Code¶
Jenkins Pipeline 使用 Groovy DSL 定义构建流程,实现版本控制的 CI/CD 流程:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'npm run build'
}
}
stage('Test') {
steps {
sh 'npm test'
}
}
stage('Deploy') {
steps {
sh 'npm run deploy'
}
}
}
}
Jenkins 架构¶
Master-Agent 架构¶
┌─────────────────────────────────────┐
│ Jenkins Master │
│ ┌─────────────────────────────┐ │
│ │ Web UI (8080) │ │
│ └─────────────────────────────┘ │
│ ┌─────────────────────────────┐ │
│ │ Scheduler │ │
│ └─────────────────────────────┘ │
│ ┌─────────────────────────────┐ │
│ │ Build Queue │ │
│ └─────────────────────────────┘ │
└───────────────┬─────────────────────┘
│
┌────────┼────────┐
│ │ │
┌───▼───┐ ┌──▼───┐ ┌──▼───┐
│ Agent │ │Agent │ │Agent │
│ 1 │ │ 2 │ │ 3 │
└───────┘ └──────┘ └──────┘
Master 职责: - 提供 Web UI - 管理配置和插件 - 调度构建任务 - 分发任务给 Agent
Agent 职责: - 执行具体的构建任务 - 报告构建状态
Jenkins vs 其他 CI/CD 工具¶
| 特性 | Jenkins | GitLab CI | GitHub Actions | CircleCI |
|---|---|---|---|---|
| 开源 | ✅ | ✅ (部分) | ❌ | ❌ |
| 自托管 | ✅ | ✅ | ❌ | ❌ |
| 插件生态 | 丰富 | 一般 | 一般 | 一般 |
| 配置复杂度 | 较高 | 中等 | 低 | 低 |
| 学习曲线 | 陡峭 | 中等 | 平缓 | 平缓 |
| 企业支持 | ✅ | ✅ | ✅ | ✅ |
适用场景¶
适合使用 Jenkins 的场景¶
- 企业级项目:需要高度定制化的 CI/CD 流程
- 多技术栈:支持 Java、Python、Node.js、Go 等多种语言
- 混合环境:需要同时支持 Linux、Windows、macOS 构建
- 合规要求:需要自托管、数据不出内网
- 复杂流程:需要复杂的构建、测试、部署流程
不太适合的场景¶
- 小型项目:配置复杂,维护成本高
- 云原生项目:GitHub Actions、GitLab CI 可能更合适
- 快速启动:需要快速搭建 CI/CD 的项目
学习路线¶
基础阶段
├── 安装部署
├── 基本配置
├── Job 创建
└── Pipeline 基础
进阶阶段
├── Pipeline 进阶
├── 多分支 Pipeline
├── 凭证管理
└── 触发器配置
高级阶段
├── 分布式构建
├── Shared Libraries
├── 安全配置
└── 性能优化
小结¶
本章介绍了 Jenkins 的基本概念和特点:
- Jenkins 是最流行的开源 CI/CD 工具
- 支持丰富的插件生态
- 采用 Master-Agent 架构
- 使用 Pipeline as Code 定义构建流程
下一章将介绍 Jenkins 的安装与配置。