跳到主要内容

基础概念

本章将介绍 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 keySSH 密钥
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

构建生命周期

  1. 触发:通过定时、Webhook 或手动触发
  2. 准备:分配节点、创建工作空间
  3. 执行:按 Pipeline 定义执行各阶段
  4. 归档:保存构建产物和报告
  5. 通知:发送构建结果通知
  6. 清理:清理工作空间(可选)

关键术语对照

英文术语中文翻译说明
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. 资源管理

  • 合理配置执行器数量
  • 及时清理旧构建
  • 监控磁盘空间使用

下一步

理解这些基础概念后,你可以:

  1. 创建你的第一个 Jenkins Job
  2. 学习 Pipeline 基础语法
  3. 探索 Jenkins 插件生态系统