1. 为什么 Jenkins 还在“主舞台”之一?
不是因为“最新”,而是因为可控边界与可组合性:插件生态覆盖千奇百怪的内部系统;自建控制器能落在私有网络、与 AD/LDAP、制品库、大型机批处理共存。 许多组织已有十年 Jenkins 作业与流水线——迁移成本本身就成了继续使用的理由。 反过来,它的代价也明确:你要自己运维、打补丁、管插件兼容性。选型本质是“买 SaaS 省心 vs 买自由度与锁定规避”。
图 1:控制器负责“接单与记账”,agent 负责“动手”;标签把任务匹配到对的机器或镜像。
2. 核心名词一张表
| 术语 | 角色 |
|---|---|
| Controller | 调度、存储配置与凭据、提供 Web UI 与 API |
| Agent / Node | 实际执行构建的机器、VM、容器或 pod |
| Executor | 节点上并行槽位:一个 executor 同时跑一个构建 |
| Label | 字符串标签,用于把 job 路由到特定 agent 池 |
| Workspace | 某次构建的工作目录(检出、产物、日志) |
3. Job 类型速览(先建立地图)
- Freestyle:向导式配置,适合极简单任务;难版本化。
- Pipeline:Jenkinsfile 描述阶段与步骤,可入库评审(下一章主角)。
- Multibranch Pipeline:为每个分支/MR 自动生成流水线,贴近现代 Git 工作流。
4. 安装路径:从笔记本试跑到生产基线
学习阶段用 Docker 最快;生产常见组合是:控制器高可用(或至少持久卷 + 备份)+ 无状态或弹性 agent。 无论哪种方式,提前决定:JENKINS_HOME 持久化、备份策略、升级窗口、出站代理(插件下载、artifact 上传)。
# Quick local trial (official image pattern; pin versions in production)
docker run --rm -d -p 8080:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
docker.io/jenkins/jenkins:lts-jdk17
# Then open http://localhost:8080 and complete setup wizard
生产提示:不要把控制器同时当重型构建机——CPU/IO 争用会让队列与 UI 卡顿;大编译放到专用 agent 或 Kubernetes 动态 pod。
反向代理(Nginx/Traefik)终止 TLS,并限制管理端口暴露面。
图 2:形态不同,但都要回答同一题:数据放哪、如何升级、如何备份。
5. 插件:超能力也是技术债
Jenkins 的强大来自插件;风险也来自插件:供应链(恶意或停更)、版本地狱(与核心 LTS 不兼容)、攻击面(脚本权限)。 基线做法:最小安装、在测试控制器验证升级、锁定 BOM 或插件清单、定期审计“谁在跑 Groovy with full permissions”。
6. 安全底线(入门就必须知道)
- 禁用匿名管理员;使用矩阵/角色策略或 SSO(SAML、OIDC 插件等)。
- 凭据用 Credentials Binding,禁止把密钥写进 job 配置明文。
- 控制器到 agent 的通道加密、校验 agent 身份;隔离不可信 PR 流水线(沙箱 agent、审批触发)。
- 开启 CSRF 保护、限制脚本审批、审计高危 Groovy(Pipeline approval)。
图 3:没有绝对更好——只有与组织成熟度、合规与团队技能是否匹配。
7. 与 GitHub / GitLab 原生 CI 的取舍
| 维度 | Jenkins | 托管 Git + 原生 CI |
|---|---|---|
| 运维 | 自建控制器与 agent,补丁与备份自理 | 供应商承担大部分平台运维 |
| 集成深度 | 插件连接任意内部系统 | 与同一产品(PR/MR)深度集成 |
| 计费模型 | 基础设施 + 人力 | 常按分钟/席/托管费 |
| 学习曲线 | Groovy、插件矩阵、拓扑复杂 | YAML 为主,上手快 |
8. 本章清单
- 画一张团队现状图:控制器几台、agent 池、关键插件列表。
- 用 Docker 起 LTS 控制器,走完初始化向导,确认 JENKINS_HOME 持久化思路。
- 为 agent 规划 label 策略(语言、OS、GPU、可信级别)。
- 列出必须的安全开关:认证、授权、凭据、CSRF、代理暴露面。
- 预告下一章:把 Freestyle 思维切换到 Jenkinsfile。