1. 文档信息
- 适用范围:中大型研发团队,支持多项目、多环境(Dev/Test/Staging/Prod)
- 建设目标:以"一切皆代码"(Everything as Code)方式建设可持续迭代的企业级 CI/CD 平台
2. 建设目标与原则
2.1 核心目标
- 打通 GitLab -> Jenkins -> 自动化测试 -> 制品仓库 -> 部署全链路
- 将流水线、基础设施、配置、安全策略全部代码化、可审计、可回滚
- 构建节点支持弹性申请与释放,降低资源成本并提升高峰期吞吐
- 在交付过程中内建质量门禁与安全门禁(Shift Left)
- 支持快速复制到多个业务线或项目组
2.2 设计原则
- 标准化优先:统一模板、统一门禁、统一观测
- 平台化沉淀:共性能力下沉到平台层,业务团队专注业务代码
- 低耦合可替换:Jenkins、测试框架、扫描工具可按插件化方式替换
- 安全默认开启:最小权限、密钥集中托管、全链路审计
- 渐进式演进:先打通主链路,再逐步补齐安全、治理、优化能力
3. 目标架构
3.1 总体架构分层
- 代码与协作层
- GitLab(代码仓库、MR 审核、Webhook 触发、分支策略)
- 流程编排层
- Jenkins Controller(流水线编排、插件治理、凭据调用、审计)
- Jenkins Shared Library(流水线模板与标准步骤)
- 弹性执行层
- Jenkins Agent(Kubernetes Pod Agent 或云主机临时 Agent)
- 自动伸缩组件(K8s Cluster Autoscaler/Karpenter 或云 ASG)
- 质量与安全层
- 自动化测试(单元/接口/UI/性能/契约)
- 代码质量(SonarQube 等)
- 安全扫描(SAST/依赖漏洞/镜像扫描/密钥扫描)
- 制品与发布层
- 制品仓库(Nexus/Artifactory/Harbor)
- 部署控制(Helm/Argo CD/Ansible/Terraform)
- 可观测与治理层
- 日志、指标、告警(ELK/Prometheus/Grafana)
- 审计与合规(操作审计、发布审计、变更追踪)
3.2 推荐部署形态
- Jenkins Controller:建议高可用部署(至少主备或容灾方案)
- Jenkins Agent:推荐基于 Kubernetes 动态 Pod,任务结束自动销毁
- GitLab:可使用企业已有实例,开启受保护分支与 MR 审批策略
- 制品仓库:按组织统一部署,并执行命名规范与生命周期管理
4. 流程设计(从提交到发布)
4.1 典型主干流程
- 开发提交代码到 GitLab Feature 分支
- 发起 Merge Request,触发 Jenkins MR Pipeline
- 执行快速质量门禁:
- 编译与单元测试
- 代码规范检查
- SAST 与依赖漏洞扫描(可按策略并行)
- MR 通过后合并到主干,触发主干流水线:
- 构建制品与镜像
- 执行接口/UI 自动化回归
- 推送制品到仓库
- 自动部署至 Dev/Test
- 环境验证通过后进入发布审批
- 执行 Staging/Prod 发布(蓝绿或金丝雀)
- 发布后自动化健康检查与回滚策略校验
4.2 质量门禁(Quality Gates)
- 单元测试覆盖率阈值(例如 >= 70%)
- 关键模块必须通过接口自动化测试
- 新增高危漏洞禁止发布
- 关键分支必须通过双人审批 + Pipeline 全绿
4.3 分支策略建议
main:生产基线,受保护分支develop:日常集成分支feature/*:功能开发release/*:发布预演hotfix/*:紧急修复
5. 一切皆代码(Everything as Code)落地
5.1 代码化范围
- Pipeline as Code:
Jenkinsfile+ Shared Library - Infrastructure as Code:Terraform(云资源)+ Helm/Kustomize(K8s 资源)
- Configuration as Code:Jenkins CasC(控制器配置)、应用配置 GitOps 化
- Policy as Code:OPA/Conftest(发布策略、安全规则)
- Test as Code:自动化测试脚本与数据版本化管理
5.2 推荐仓库结构(示例)
cicd-platform/
jenkins/
casc/
plugins.txt
shared-library/
pipelines/
templates/
project-a/
project-b/
iac/
terraform/
modules/
envs/
dev/
test/
prod/
kubernetes/
helm-charts/
manifests/
policy/
opa/
conftest/
tests/
unit/
api/
ui/
performance/
docs/
runbooks/
architecture/
5.3 变更控制方式
- 所有平台变更走 GitLab MR(包括 Jenkins 配置)
- 禁止直接在生产控制台手工修改关键配置
- 每次变更自动触发语法校验、策略校验与预演
6. 弹性构建节点方案
6.1 推荐方案 A(优先)
- Jenkins Kubernetes Plugin + K8s Pod Template
- 每个 Stage 根据标签动态申请 Pod(如
maven,node,python,docker) - 任务结束自动释放 Pod,避免资源长期占用
- 结合 Cluster Autoscaler 或 Karpenter 自动扩缩容节点池
6.2 备选方案 B
- Jenkins + 云厂商 Auto Scaling Group(临时 VM Agent)
- 基于队列长度或 CPU 利用率扩容,空闲回收
6.3 关键设计点
- Agent 镜像标准化:预置常用构建工具,减少每次安装耗时
- 缓存策略:依赖缓存与镜像层缓存(注意隔离与安全)
- 资源配额:按团队/项目设置并发上限与资源配额
- 隔离机制:命名空间隔离、凭据最小权限、网络策略限制
7. 自动化测试体系设计
7.1 测试分层
- L1:单元测试(提交即跑,快速反馈)
- L2:接口/契约测试(主干合并必跑)
- L3:UI 回归测试(按模块和风险分层运行)
- L4:性能与稳定性测试(准入前执行)
7.2 测试触发策略
- MR:L1 + 关键 L2
- 主干:L1 + L2 + 部分 L3
- 夜间构建:全量 L3 + L4
7.3 测试数据与环境
- 测试数据版本化,自动初始化
- 环境即代码,可一键拉起并回收
- 对外部依赖使用 Mock/Stub 提升稳定性
8. 安全与合规设计
- 身份认证:统一 SSO/OIDC,RBAC 最小权限
- 密钥管理:Vault/KMS,不在仓库存明文密钥
- 安全扫描左移:SAST、SCA、镜像扫描、IaC 扫描
- 审计闭环:记录"谁在何时发布了什么版本到哪个环境"
- 合规策略:高危漏洞、未审批变更、未签名制品均禁止发布
9. 可观测性与运维
- Pipeline 可观测:成功率、平均耗时、失败阶段分布
- 资源可观测:构建节点 CPU/内存利用率、队列等待时长
- 质量可观测:测试通过率、缺陷逃逸率、回归失败趋势
- 发布可观测:发布时间、回滚率、变更失败率
- 告警机制:失败率突增、队列拥堵、关键服务不可用即时告警
10. 高可用与容灾
- Jenkins Controller:定期备份配置、凭据和作业元数据
- GitLab 与制品仓库:按企业标准做多副本与异地备份
- 数据恢复演练:按季度演练恢复流程(RPO/RTO 可量化)
- 关键组件版本升级采用灰度与回退预案
11. 交付里程碑(建议 3 阶段)
阶段 1:基础打通(2-4 周)
- 打通 GitLab Webhook -> Jenkins -> 自动化测试 -> 制品仓库
- 建立 Jenkinsfile 模板与共享库
- 完成 Dev/Test 自动部署
阶段 2:平台化治理(4-8 周)
- 引入 Jenkins CasC 与 Terraform
- 上线弹性构建节点与资源配额
- 建立质量门禁与安全门禁
阶段 3:高级发布能力(4-8 周)
- 蓝绿/金丝雀发布
- 完整可观测大盘与告警体系
- 多团队复制推广与平台运营机制
12. 组织与职责分工(RACI 简版)
- 平台团队:平台建设、模板维护、可观测与治理
- 业务研发:业务流水线配置、测试补齐、发布执行
- 测试团队:测试策略与自动化覆盖建设
- 安全团队:安全策略制定、漏洞处置与审计
- 运维/SRE:容量规划、稳定性保障、应急响应
13. 成功度量指标(建议)
- 交付频率(Deploy Frequency)
- 变更前置时间(Lead Time for Changes)
- 变更失败率(Change Failure Rate)
- 平均恢复时长(MTTR)
- Pipeline 平均耗时与排队时长
- 自动化测试覆盖率与通过率
14. 风险与对策
-
风险:工具链复杂导致学习成本高
-
对策:模板化、脚手架化、培训与文档化
-
风险:流水线过慢影响研发效率
-
对策:并行化执行、分层测试、缓存优化、增量测试
-
风险:弹性节点配置不当导致成本失控
-
对策:预算告警、配额限制、闲置回收策略
-
风险:策略过严影响交付速度
-
对策:按环境分级门禁,先告警后阻断,逐步收紧
15. 下一步落地建议
- 先选 1-2 个代表性项目做试点,验证模板和门禁策略
- 明确"最小可用标准流水线"并沉淀成共享库
- 先实现 K8s 弹性 Agent,再推进 CasC 与 Terraform 全量接管
- 建立月度度量看板,用数据持续优化交付效率与质量
附录 A:示例 Jenkins 流水线骨架(简化)
pipeline {
agent none
stages {
stage('Build & Unit Test') {
agent { label 'maven' }
steps {
sh 'mvn clean test'
}
}
stage('Static Analysis') {
parallel {
stage('SAST') {
agent { label 'security' }
steps { sh './scripts/run-sast.sh' }
}
stage('SCA') {
agent { label 'security' }
steps { sh './scripts/run-sca.sh' }
}
}
}
stage('Build Image') {
agent { label 'docker' }
steps {
sh './scripts/build-image.sh'
}
}
stage('Deploy Dev') {
agent { label 'k8s' }
steps {
sh './scripts/deploy-dev.sh'
}
}
}
}
附录 B:推荐技术选型(可替换)
- SCM:GitLab
- CI Orchestrator:Jenkins + Shared Library + CasC
- Elastic Runtime:Kubernetes + Cluster Autoscaler/Karpenter
- Artifact:Nexus/Artifactory/Harbor
- Quality:SonarQube
- Security:SAST/SCA/Container Scan/IaC Scan 组合
- Observability:Prometheus + Grafana + Loki/ELK
- IaC:Terraform + Helm/Kustomize + GitOps(可选 Argo CD)