🚀 CI/CD 革命
CI/CD(持续集成/持续部署)是现代软件开发的基石。根据 Puppet 2023 报告,实施 CI/CD 的团队部署频率提高 208 倍,故障恢复时间快 106 倍。
CI/CD 的核心价值
快速反馈
代码提交后几分钟内获得构建/测试反馈
频繁发布
从每月发布变为每天多次发布
降低风险
小批量变更,出问题影响范围小
质量保障
自动化测试确保每次变更不破坏现有功能
💡 独特观点
CI/CD 的真正价值不是"自动化部署",而是建立反馈循环。它让团队能够快速试错、快速学习、快速改进。
📦 CI/CD 核心概念
理解 CI/CD 的核心概念是掌握其精髓的基础。
1. CI(持续集成,Continuous Integration)
定义: developers frequently merge code changes into a shared repository (multiple times a day), each merge triggers automated build and testing.
代码提交
Developer 提交代码到 Git
自动构建
CI Server 拉取代码,编译
自动测试
运行单元测试、集成测试
反馈结果
成功/失败通知开发者
📝 CI 配置示例(GitHub Actions)
name: CI Pipeline
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run lint
- name: Type check
run: npm run type-check
- name: Unit tests
run: npm run test:unit
- name: Build
run: npm run build
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: build-output
path: dist/2. CD(持续部署,Continuous Deployment)
定义:After CI passes, automatically deploy the application to production (or staging) environment.
📦 Continuous Delivery(持续交付)
代码通过 CI 后,可以手动部署到生产环境(需要人工点击按钮)
✅ 自动化到"准备部署"阶段
✅ 部署决策由人工做出
✅ 适合保守的企业文化
🚀 Continuous Deployment(持续部署)
代码通过 CI 后,自动部署到生产环境(无需人工干预)
✅ 完全自动化,从提交到上线
✅ 需要完善的测试和监控
✅ 适合互联网公司、初创企业
📝 CD 配置示例(GitHub Actions 部署到 Cloudflare Pages)
name: Deploy to Cloudflare Pages
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Deploy to Cloudflare Pages
uses: cloudflare/pages-action@v1
with:
api-token: ${{ secrets.CLOUDFLARE_API_TOKEN }}
account-id: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
project-name: my-project
directory: dist
git-hub-token: ${{ secrets.GITHUB_TOKEN }}3. CI/CD 流水线(Pipeline)
定义:一系列自动化步骤,将代码从提交变为可发布的软件。
1. 代码提交
Git push / Pull Request
2. 构建(Build)
编译、打包、生成制品
3. 测试(Test)
单元测试、集成测试、E2E 测试
4. 打包(Package)
Docker 镜像、NPM 包、可执行文件
5. 部署(Deploy)
部署到 Staging / Production
📝 总结与展望
CI/CD 是现代软件开发的基础设施。通过本文的学习,你应该掌握了:
🎯 核心要点
- 核心概念:CI(持续集成)、CD(持续交付/部署)
- 流水线:代码提交 → 构建 → 测试 → 部署
- Jenkins:Jenkinsfile、Pipeline、Agent、Stage
- GitHub Actions:Workflow、Job、Step、Action、Secret
- GitLab CI:.gitlab-ci.yml、Runner、Pipeline、Artifact
- Docker 集成:Dockerfile、docker build、docker push
- 自动化测试:单元测试、集成测试、E2E 测试
- 自动化部署:Staging、Production、蓝绿部署、金丝雀发布
- 监控与回滚:健康检查、自动回滚、告警通知
- 最佳实践:版本控制、密钥管理、并行执行、缓存优化
🚀 未来展望
CI/CD 领域正在快速演进,值得关注的方向:
- GitOps:使用 Git 作为唯一的部署源(Argo CD、Flux)
- AI 辅助 CI/CD:自动生成 Pipeline、智能测试选择
- Serverless CI/CD:GitHub Actions、GitLab SaaS,无需自建
- 安全扫描集成:SAST、DAST、SCA 集成到 Pipeline
- 渐进式交付:Feature Flag、金丝雀发布、A/B 测试