基础概念
本章将介绍 Jenkins 的核心概念和术语,帮助你建立对 Jenkins 的整体理解。
Jenkins 架构
Master-Agent 架构
Jenkins 采用主从(Master-Agent)架构,支持分布式构建:
┌─────────────────────────────────────────────────────────────┐
│ Jenkins 架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Jenkins Master │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Web UI │ │ Scheduler │ │ Queue │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Plugin │ │ Credential │ │ Config │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └──────────────────────┬──────────────────────────────┘ │
│ │ │
│ ┌───────────────┼───────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Agent 1 │ │ Agent 2 │ │ Agent 3 │ │
│ │ (Linux) │ │ (Windows) │ │ (macOS) │ │
│ └───────────┘ └───────────┘ └───────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Master(主节点):
- 负责管理配置和任务调度
- 维护构建队列
- 管理插件和凭据
- 提供 Web 界面和 REST API
- 可以执行构建任务(但不推荐)
Agent(从节点):
- 执行具体的构建任务
- 支持多种操作系统
- 可以动态创建和销毁
- 减轻 Master 的负担
核心概念
1. Job(任务/项目)
Job 是 Jenkins 的基本工作单元,代表一个需要执行的任务。
Job 类型:
| 类型 | 说明 | 适用场景 |
|---|---|---|
| Freestyle | 自由风格项目 | 简单任务 |
| Pipeline | 流水线项目 | 复杂 CI/CD |
| Multibranch Pipeline | 多分支流水线 | 多分支项目 |
| Organization Folder | 组织文件夹 | 多仓库管理 |
| Folder | 文件夹 | 项目分类 |
Job 配置要素:
- 源码管理(Git、SVN 等)
- 构建触发器
- 构建步骤
- 构建后操作
2. Pipeline(流水线)
Pipeline 是 Jenkins 最强大的功能,使用代码定义整个构建流程。
Pipeline 类型:
// Declarative Pipeline(声明式)
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building...'
}
}
stage('Test') {
steps {
echo 'Testing...'
}
}
}
}
// Scripted Pipeline(脚本式)
node {
stage('Build') {
echo 'Building...'
}
stage('Test') {
echo 'Testing...'
}
}
Pipeline 优势:
- 代码化:Pipeline 即代码,可版本控制
- 可视化:Blue Ocean 提供现代化界面
- 可复用:支持共享库
- 持久化:即使 Master 重启也能恢复
3. Node(节点)
Node 代表 Jenkins 的执行环境。
节点类型:
┌─────────────────────────────────────────┐
│ 节点类型 │
├─────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Master │ │ Agent │ │
│ │ (内置节点) │ │ (外部节点) │ │
│ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Static │ │ Dynamic │ │
│ │ (固定节点) │ │ (动态节点) │ │
│ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Physical │ │ Cloud │ │
│ │ (物理机) │ │ (云节点) │ │
│ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────┘
节点属性:
- 标签(Label):用于选择节点
- 执行器数量:并行构建数
- 环境变量:节点特定的变量
- 工具位置:JDK、Maven 等工具路径
4. Plugin(插件)
Jenkins 的强大之处在于其丰富的插件生态系统。
插件分类:
| 类别 | 代表插件 | 功能 |
|---|---|---|
| 源码管理 | Git Plugin、SVN Plugin | 代码拉取 |
| 构建工具 | Maven Plugin、Gradle Plugin | 项目构建 |
| 通知 | Slack Plugin、Email Plugin | 消息通知 |
| 部署 | SSH Plugin、Kubernetes Plugin | 应用部署 |
| 安全 | Role-based Authorization | 权限管理 |
| 集成 | Docker Plugin、SonarQube | 工具集成 |
插件管理:
- 通过 Web UI 安装
- 自动更新
- 依赖管理
- 版本回滚
5. Workspace(工作空间)
每个 Job 在节点上都有一个独立的工作目录。
JENKINS_HOME/
└── workspace/
├── my-project/ # 项目工作空间
│ ├── src/ # 源代码
│ ├── target/ # 构建输出
│ └── .git/ # Git 仓库
└── another-project/ # 另一个项目
工作空间特点:
- 默认在构建前清理(可配置)
- 可以被多个构建共享
- 支持并发构建时复制
- 可自定义路径
6. Build(构建)
Build 是 Job 的一次执行实例。
构建状态:
| 状态 | 图标 | 说明 |
|---|---|---|
| Success | 🟢 | 构建成功 |
| Unstable | 🟡 | 构建完成但有问题 |
| Failure | 🔴 | 构建失败 |
| Aborted | ⚪ | 构建被中止 |
| Not Built | ⚫ | 未构建 |
构建编号:
- 每次构建自动递增
- 可通过
${BUILD_NUMBER}引用 - 支持永久保留特定构建
7. Artifact(构建产物)
构建过程中生成的可交付文件。
常见产物:
- JAR/WAR 文件
- Docker 镜像
- 测试报告
- 文档
- 日志文件
产物管理:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
}
post {
always {
// 归档产物
archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
}
}
}
8. Credential(凭据)
安全存储敏感信息,如密码、密钥、令牌等。
凭据类型:
| 类型 | 用途 |
|---|---|
| Username with password | 用户名密码 |
| SSH Username with private key | SSH 密钥 |
| Secret file | 秘密文件 |
| Secret text | 令牌、API Key |
| Certificate | 证书 |
凭据范围:
- System:仅 Jenkins 系统使用
- Global:所有 Job 可用
- Folder:特定文件夹内可用
9. Trigger(触发器)
定义何时启动构建。
触发器类型:
┌─────────────────────────────────────────┐
│ 触发器类型 │
├─────────────────────────────────────────┤
│ │
│ 1. 定时触发 (Build periodically) │
│ - 类似 Cron 表达式 │
│ - H/15 * * * * (每15分钟) │
│ │
│ 2. 轮询 SCM (Poll SCM) │
│ - 定期检查代码变更 │
│ - */5 * * * * (每5分钟) │
│ │
│ 3. Webhook 触发 │
│ - Git push 自动触发 │
│ - 即时响应,推荐 │
│ │
│ 4. 上游项目触发 │
│ - 其他 Job 完成后触发 │
│ - 构建链 │
│ │
│ 5. 手动触发 │
│ - 用户手动点击 │
│ - 参数化构建 │
│ │
└─────────────────────────────────────────┘
10. Stage(阶段)
Pipeline 中的逻辑步骤,用于组织构建流程。
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git 'https://github.com/example/repo.git'
}
}
stage('Build') {
steps {
sh 'mvn clean compile'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Deploy') {
steps {
sh 'mvn deploy'
}
}
}
}
Jenkins 工作流程
典型 CI/CD 流程
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ 代码提交 │ -> │ 拉取代码 │ -> │ 编译构建 │ -> │ 测试验证 │ -> │ 部署上线 │
│ (Git) │ │ (Clone) │ │ (Build) │ │ (Test) │ │(Deploy) │
└─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘
│ │ │ │ │
└──────────────┴──────────────┴──────────────┴──────────────┘
Jenkins Pipeline
构建生命周期
- 触发:通过定时、Webhook 或手动触发
- 准备:分配节点、创建工作空间
- 执行:按 Pipeline 定义执行各阶段
- 归档:保存构建产物和报告
- 通知:发送构建结果通知
- 清理:清理工作空间(可选)
关键术语对照
| 英文术语 | 中文翻译 | 说明 |
|---|---|---|
| Master | 主节点 | Jenkins 管理节点 |
| Agent/Slave | 从节点 | 执行构建的节点 |
| Node | 节点 | 执行环境 |
| Executor | 执行器 | 并行构建槽位 |
| Job/Project | 任务/项目 | 构建单元 |
| Build | 构建 | 一次执行实例 |
| Pipeline | 流水线 | 代码化构建流程 |
| Stage | 阶段 | Pipeline 中的步骤 |
| Step | 步骤 | 具体操作 |
| Plugin | 插件 | 功能扩展 |
| Workspace | 工作空间 | 构建目录 |
| Artifact | 产物 | 构建输出 |
| Credential | 凭据 | 敏感信息 |
| Trigger | 触发器 | 构建启动条件 |
| View | 视图 | Job 分组展示 |
最佳实践
1. 架构设计
- Master 只负责管理,不执行构建
- 使用 Agent 执行所有构建任务
- 根据需求配置不同环境的 Agent
2. Pipeline 编写
- 使用 Declarative Pipeline 语法
- 将 Pipeline 代码放入版本控制
- 使用共享库复用代码
3. 安全管理
- 使用 Credential 管理敏感信息
- 配置适当的权限控制
- 定期更新 Jenkins 和插件
4. 资源管理
- 合理配置执行器数量
- 及时清理旧构建
- 监控磁盘空间使用
下一步
理解这些基础概念后,你可以:
- 创建你的第一个 Jenkins Job
- 学习 Pipeline 基础语法
- 探索 Jenkins 插件生态系统