【运维】CI/CD是什么,合格的规范应该怎么设置

一句话:CI/CD 是让代码从提交到上线自动化的流水线;CI 规范则是团队对"什么代码能合并、什么制品能发布、什么情况能上生产"的自动化门禁和约定。

一、CI/CD 是什么

概念 含义 关键点
CI(持续集成) 开发者频繁把代码合并到主干,每次提交自动构建、测试、检查 尽早发现集成问题,避免"合并地狱"
CD(持续交付) CI 基础上,自动部署到预发/类生产环境,生产发布可人工审批 保证随时可发布
CD(持续部署) 变更通过所有门禁后自动上生产 对测试、监控、回滚要求很高

典型 CI/CD 流水线:

text 复制代码
提交代码 -> 触发流水线 -> 检出代码 -> 安装依赖 -> Lint/类型检查
-> 单元测试 -> 构建 -> 集成测试 -> 安全扫描 -> 上传制品
-> 部署 Dev -> 部署 Staging -> 审批 -> 部署生产 -> 监控/回滚

核心价值:快速反馈、减少手工、质量门禁、可重复发布、可回滚。

二、怎么设置 CI 规范

CI 规范不是只写一个 YAML,而是"流程约定 + 自动化门禁 + 度量改进"。

1. 分支与合并规范

推荐:

  • main 为主干,必须保护:禁止直推、禁止 force push。
  • 功能分支:feature/xxx、fix/xxx、hotfix/xxx。
  • 所有变更走 PR/MR。
  • 合并前必须满足:
    • CI 全绿;
    • 至少 1 人 review;
    • 分支与主干同步;
    • 无冲突;
    • 关键项目要求 CODEOWNERS 审批。

GitHub 设置位置:Settings -> Branches -> Branch protection rules

GitLab:Settings -> Repository -> Protected branches + Merge request approvals

2. 提交与 PR 规范

  • 提交信息建议用 Conventional Commits:feat:、fix:、docs:、refactor:。
  • PR 要小,最好一次只解决一个问题。
  • PR 模板包含:变更内容、测试方式、影响范围、回滚方案。
  • 禁止 [skip ci] 绕过,除非纯文档且团队允许。

3. 流水线阶段与质量门禁

建议分阶段,先快后慢:

text 复制代码
lint/format -> typecheck -> unit test -> build -> scan -> integration test -> deploy

常见门禁:

  • Lint/格式:0 error;
  • 类型检查:通过;
  • 单元测试:100% 通过;
  • 覆盖率:新增代码 ≥ 80%,整体不下降;
  • 构建:成功,且产物唯一、不可变;
  • 安全扫描:无 Critical/High 漏洞;
  • 依赖扫描:无高危依赖;
  • 制品:上传到制品库,使用版本号或 commit SHA,不用 latest。

4. 触发规则

建议:

  • PR 到 main:跑 lint、单测、构建、扫描;
  • push 到 main:构建制品,自动部署 Dev;
  • 打 tag,如 v1.2.3:部署 Staging,审批后上生产;
  • 定时任务: nightly 跑 E2E、性能、安全扫描。

5. 环境、密钥与权限

  • 环境隔离:Dev、Staging、Prod。
  • 配置外置,不硬编码。
  • 密钥放 Secrets/Vault/KMS,禁止打印。
  • CI 权限最小化,生产部署用 OIDC 短期凭证。
  • 生产环境加人工审批,如 GitHub Environments、GitLab Protected Environments。

6. 部署与回滚

  • 部署策略:滚动、蓝绿、金丝雀。
  • 每次部署有唯一版本号,保留 N-1 版本。
  • 健康检查失败自动回滚。
  • 数据库迁移要向后兼容,建议 expand/contract。
  • 生产发布必须有回滚方案和负责人。

7. 通知与度量

  • 失败通知到 IM / 邮件。
  • 跟踪 DORA 指标:
    • 部署频率;
    • 变更前置时间;
    • 变更失败率;
    • 平均恢复时间(MTTR)。
  • Flaky 测试要治理,不能靠无限重试。

三、一个可落地的 CI 规范模板

text 复制代码
# CI 规范

## 分支
- main 保护,禁止直推
- feature/* 开发,PR 合并
- hotfix/* 紧急修复

## PR 门禁
- 至少 1 人 review
- CI 必须全绿
- 新增代码覆盖率 ≥ 80%
- 无 Critical/High 漏洞

## 流水线
1. lint + typecheck
2. unit test
3. build
4. security scan
5. 上传制品
6. 部署 dev
7. 部署 staging
8. 人工审批后部署 prod

## 部署
- 使用不可变版本号
- 生产支持蓝绿/金丝雀
- 失败自动回滚
- 保留上一版本

## 密钥
- 禁止硬编码
- 使用 Secrets/Vault
- 生产审批 + 审计

四、GitHub Actions 最小示例

yaml 复制代码
name: ci
on:
  pull_request:
  push:
    branches: [main]

permissions:
  contents: read

concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: true

jobs:
  verify:
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - run: npm ci
      - run: npm run lint
      - run: npm run typecheck
      - run: npm test -- --coverage
      - run: npm run build

然后在 GitHub 分支保护里把 verify 设为 Required status check 。生产部署可以另建 workflow,用 tag 触发,并绑定 production environment 做人工审批。

五、落地顺序建议

  1. 先做最小可用:PR 触发 lint + 单测。
  2. 加分支保护:CI 不过不能合并。
  3. 加构建和制品上传。
  4. 加 Dev/Staging 自动部署。
  5. 加安全扫描、覆盖率门禁。
  6. 加生产审批、金丝雀、自动回滚。
  7. 最后用 DORA 指标持续优化。

原则:先自动化,再门禁化,再标准化,最后度量优化。 不要一开始就设计过度复杂,否则 CI 会变成拖慢开发的瓶颈。

相关推荐
Dachui_11221 小时前
内网穿透如何限制访问地区?ZeroNews Geo Location 区域访问控制实践
运维·网络安全·内网穿透·访问控制·远程办公·api安全·ip白名单
根目录下的猫1 小时前
虚拟机复制过来运行时:“虚拟机使用的此版本,VMware Workstation 不支持的硬件版本。”错误解决办法,亲测可用
linux·运维·服务器·后端
梦帮科技1 小时前
【3.0】上线与运维:节点监控、水龙头、区块浏览器与安全清单
运维·安全·web安全·金融·区块链·密码学·安全架构
帷幕落秋2 小时前
内存、虚拟内存与 OOM
linux·运维
mengge.cloud2 小时前
Redis
运维·服务器·数据库·redis·缓存·云计算
Smoothcloud润云2 小时前
GPU服务器租用实例DNS与HTTPS下载排障实战
大数据·运维·服务器·人工智能·https·gpu算力
Apipi*2 小时前
30天速通Linux 第五章Linux 进程管理
linux·运维·服务器
杨云龙UP2 小时前
PostgreSQL 四种常见部署模式快速理解:单实例、流复制、repmgr、Patroni
linux·运维·数据库·postgresql·流复制·高可用ha
白帽攻防录2 小时前
SRC 挖洞:TanStack Start 服务器函数 XSS 深度复盘,CVE-2026-102989 怎么窃取用户会话
运维·服务器·网络安全·xss