Jenkins 核心概念
Jenkins = 一个任务调度 + 执行的自动化平台
Jenkins 本身不关心你是 Java / Python / Go / 前端
它只关心三件事:
- 什么时候执行
- 在哪执行
- 执行什么
在 Jenkins 出现之前,开发流程是:
写代码 -> 手动 build -> 手动 test -> 手动 deploy -> 出问题回滚
Jenkins 出现之后:
git push -> Jenkins 自动 build -> test -> deploy -> 通知
核心目标:
- 减少人为操作
- 提高交付频率
- 降低发布风险
- 流程可追溯、可回滚
Jenkins 2.x 官方称呼:Controller
职责:
- 提供 Web UI
- 管理 Job / Pipeline
- 调度构建任务
- 管理插件
- 管理 Credentials
- 与 Agent 通信
⚠️ 最佳实践:
Controller 不执行构建任务(executor = 0)
实际执行构建任务的工作节点
特点:
- 可以是物理机 / 虚拟机 / 容器
- 支持 Linux / Windows / macOS
- 可根据 Label 指定执行环境
常见类型:
- SSH Agent
- JNLP Agent
- Docker Agent
- Kubernetes Agent(动态 Pod)
Executor = 并行执行能力
- 每个 Agent 可设置多个 executor
- 一个 executor 同时只能跑一个 Job
- executor = 0 -> 不执行任何构建
生产建议:
- Controller:0
- Agent:1~4(看 CPU / IO)
用于 精准调度 Job 到指定 Agent
例:
linux
docker
java
node
k8s
Pipeline 中使用:
agent { label 'docker' }
Job = Jenkins 中的一个任务定义
常见 Job 类型:
| 类型 | 说明 |
|---|---|
| Freestyle | 老式任务(已不推荐) |
| Pipeline | Jenkinsfile 驱动 |
| Multibranch Pipeline | 多分支自动化 |
| Folder | 组织 Job |
| Organization Folder | GitHub/GitLab 组织 |
现代 Jenkins = Pipeline + Multibranch Pipeline
Pipeline = 一条完整的 CI/CD 流程
特点:
- 代码化(Pipeline as Code)
- 可版本控制
- 可 review
- 可复现
Pipeline 定义在 Jenkinsfile 中。
两种 Pipeline 模式:
| 类型 | 特点 |
|---|---|
| Declarative | 结构清晰、简单、推荐 |
| Scripted | 灵活、基于 Groovy |
Declarative 示例:
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'build'
}
}
}
}
- Stage:逻辑阶段(Build / Test / Deploy)
- Step:具体命令
- Stage View:可视化流程
Jenkins 支持:
- Git(最常用)
- GitHub / GitLab / Bitbucket
- SVN
SCM 只负责:代码来源
常见触发机制:
| 方式 | 说明 |
|---|---|
| 手动 | 点击 Build |
| Webhook | Git push 自动触发 |
| Poll SCM | 定期拉取 |
| cron | 定时构建 |
| PR Trigger | Pull Request |
生产只推荐 Webhook + cron
Jenkins 统一的密钥管理系统
支持:
- 用户名 + 密码
- SSH 私钥
- Token
- 文件(kubeconfig)
核心原则:
不把密钥写在 Jenkinsfile 中
- Global
- Folder
- Job
- Domain
生产推荐:
Global credentials (unrestricted)
触发 -> 排队 -> 分配 Agent -> 分配 Executor -> 执行 Pipeline -> 结果存储
如果卡住,排查顺序:
- Queue
- Agent 在线状态
- Executor 数量
- Workspace 锁
Workspace = 构建目录
特点:
- 每个 Job / Branch 一个 workspace
- 支持并发构建
- 可能被锁住
常用清理:
cleanWs()
Jenkins = 核心 + 插件
插件负责:
- Git
- Docker
- Kubernetes
- Credentials
- UI
- 通知
⚠️ 插件过多 = 不稳定
企业建议 < 40 个
通过多个 Agent 实现:
- 横向扩展
- 资源隔离
- 多环境构建
核心思想:
Jenkins Controller 稳定运行
Agent 按需创建 Pod,用完即销毁
优势:
- 弹性
- 干净
- 成本低
- 云原生
- Controller 不跑 Job
- Agent 无状态
- Jenkinsfile 简洁
- RBAC
- Credentials 加密存储
- Script Approval
- CSRF 防护
- HTTPS
Jenkins 是一个以 Pipeline 为核心,通过 Controller 调度、Agent 执行、插件扩展,实现 CI/CD 自动化的任务调度平台。