CI/CD 流水线:从手动发布到一键上线#
发布是最高危的操作:手动发布 = 靠人记步骤 + 靠运气不犯错。CI/CD 的价值不是"自动化"三个字,是把发布变成"可重复、可回滚、可审计"的流程。
一、手动发布的痛点#
二、流水线的三个阶段#
三、流水线设计(GitHub Actions 示例)#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
name: CI/CD
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test: # CI:提交即测试
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with: { go-version: '1.24' }
- run: go vet ./...
- run: go test -race ./...
- run: go build ./...
deploy: # CD:合并即部署
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: docker build -t registry/xx:${GITHUB_SHA::7} .
- run: docker push registry/xx:${GITHUB_SHA::7}
- run: kubectl set image deploy/xx app=registry/xx:${GITHUB_SHA::7}
|
四、流水线的关键设计#
1. 产物不可变(构建一次,处处使用)#
2. 阶段门禁(Gate)#
3. 回滚机制#
4. 环境隔离#
五、踩坑记录#
- 测试阶段没跑全:CI 只跑 build 不跑 test → 错误进生产 → CI 里 test 是必过门禁
- 构建产物不一致:CI 和本地构建结果不同(版本/依赖差异)→ 用锁文件(go.sum/package-lock)+ 固定构建镜像
- 密钥进代码:部署密钥写在流水线 YAML → 泄漏 → 用 Secrets(GitHub Secrets / CI 平台的密钥管理)
- 回滚链路没演练:有回滚按钮,没演练过 → 真出事了按钮没用 → 回滚要演练(每月一次)
- 流水线变长:一次提交等 20 分钟 → 反馈慢 → 拆分:快速检查(5 分钟)+ 深度测试(定时跑)
六、流水线的指标#
这四个指标是 DORA 研究的核心:部署快 + 失败少 + 恢复快 = 健康交付。
CI/CD 的核心认知:
- CI 管"提交即验证":构建 + 测试 + 门禁
- CD 管"验证即部署":产物不可变 + 环境递进
- 回滚是标配不是备选:版本化 + 一键回滚 + 演练
- 四指标看健康度:部署频率、前置时间、失败率、恢复时间
CI/CD 的终极形态不是"全自动发布",是"发布低风险"。 自动化只是手段,让发布"快而稳"才是目的。
微信公众号「福清而不淡」
后端架构 · AI 工程 · 云原生的一线实践,扫码关注,不错过更新。
本文已同步发布到公众号,欢迎留言交流。