使用 GoCD 部署
持续交付服务器,支持价值流图和流水线即代码。
CI/CD进阶
为什么
GoCD 将整个交付流水线可视化为价值流图,使瓶颈和依赖一目了然。DORA 2024 DevOps 状态报告显示精英团队部署频率比低绩效团队高 973 倍。
带自动化测试的 CI/CD 管道将变更失败率降至 5-15%,而手动部署为 40-60%。
何时使用
需要可视化流程跟踪和扇入/扇出的复杂交付流水线。贡献者少于 5 人的仓库避免复杂管道编排 — pre-commit 钩子 + GitHub Actions 足够。
除非需要 GPU 或 VPN 访问,否则跳过自托管 runner。
如何做
# GoCD 管道 配置 (XML)
<pipeline name="build-and-deploy">
<materials>
<git url="https://github.com/myorg/app.git" branch="main" />
</materials>
<stage name="build">
<jobs>
<job name="compile">
<tasks>
<exec command="npm" args="ci" />
<exec command="npm" args="run build" />
</tasks>
<artifacts>
<artifact src="dist/**" />
</artifacts>
</job>
</jobs>
</stage>
<stage name="deploy">
<jobs>
<job name="deploy-prod">
<tasks>
<exec command="kubectl" args="apply -f k8s/" />
</tasks>
</job>
</jobs>
</stage>
</pipeline>
4. 验证部署 — curl -I https://your-app.example.com
5. 监控日志 — 前 5 分钟检查错误
6. 需要时回滚 — 回退到上一版本
示例
# GoCD 服务器 via Docker
docker run -d --name gocd-server \
-p 8153:8153 -p 8154:8154 \
-v gocd-data:/godata \
gocd/gocd-server:v24.1
常见问题
- ⚠配置仓库未更新 — 检查 material 轮询
- ⚠Agent 空闲 — 确保弹性 agent 插件已配置
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓用 config repo — 流水线定义放 Git
- ✓用弹性 agent — 按构建需求扩缩
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求