CI/CD入门指南

GitHub Actions、自动化测试流水线与部署策略

📅 2026年4月6日 · 阅读约10分钟 · CI/CDDevOpsGitHub Actions

CI/CD(Continuous Integration / Continuous Deployment)是现代软件开发的核心实践,它通过自动化构建、测试和部署流程,大幅提升开发效率和发布质量。从个人项目到大型团队,CI/CD已成为标配。本指南将从概念到实战,帮助你建立完整的CI/CD知识体系。

一、CI/CD核心概念

CI(持续集成,Continuous Integration):开发者频繁将代码合并到主分支,每次合并自动触发构建和测试,尽早发现问题。

CD(持续交付/部署,Continuous Delivery/Deployment):在CI通过后,自动将代码部署到预发布或生产环境。持续交付需要人工确认,持续部署完全自动化。

CI/CD流水线典型阶段

  1. 代码提交 — git push触发流水线
  2. 安装依赖 — npm install / pip install
  3. 代码检查 — ESLint / Prettier / Pylint
  4. 单元测试 — Jest / pytest / JUnit
  5. 集成测试 — 测试服务间交互
  6. 构建 — 编译、打包Docker镜像
  7. 部署 — 推送到生产环境
  8. 监控 — 健康检查、告警

二、GitHub Actions实战

GitHub Actions是目前最流行的CI/CD工具之一,与GitHub深度集成,配置简单。

2.1 基础配置文件

# .github/workflows/ci.yml
name: CI/CD Pipeline

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  # 作业1:测试
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18, 20, 22]

    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}

      - name: Install dependencies
        run: npm ci

      - name: Run lint
        run: npm run lint

      - name: Run tests
        run: npm test -- --coverage

      - name: Upload coverage
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

  # 作业2:构建
  build:
    needs: test
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Build Docker image
        run: docker build -t myapp:${{ github.sha }} .

      - name: Push to registry
        run: |
          echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USER }} --password-stdin
          docker push myapp:${{ github.sha }}

  # 作业3:部署(仅main分支)
  deploy:
    needs: build
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'

    steps:
      - name: Deploy to server
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            docker pull myapp:${{ github.sha }}
            docker stop myapp || true
            docker rm myapp || true
            docker run -d --name myapp -p 3000:3000 myapp:${{ github.sha }}

2.2 常用Actions

Action用途
actions/checkout检出代码仓库
actions/setup-node安装Node.js环境
actions/setup-python安装Python环境
actions/cache缓存依赖,加速构建
codecov/codecov-action上传测试覆盖率
appleboy/ssh-actionSSH远程部署
peaceiris/actions-gh-pages部署到GitHub Pages

三、部署策略

3.1 蓝绿部署

维护两套完全相同的环境(蓝和绿),新版本部署到空闲环境验证后切换流量。优点是回滚速度快(切换回旧环境即可),缺点是需要双倍资源。

3.2 金丝雀发布

先将新版本推送给少量用户(如5%),观察错误率、响应时间等指标,确认无问题后逐步扩大范围(25% → 50% → 100%)。适合对稳定性要求高的场景。

3.3 滚动更新

逐步替换旧版本实例,每次替换一部分。Kubernetes的默认部署策略就是滚动更新。

四、CI/CD最佳实践

五、CI/CD工具对比

工具特点适用场景
GitHub Actions与GitHub集成,免费额度充足GitHub项目首选
GitLab CI与GitLab集成,功能全面GitLab项目首选
Jenkins插件生态丰富,自建服务器大型企业、定制化需求
CircleCI速度快,配置简洁追求速度的团队
Travis CI老牌CI,开源项目免费开源项目

🛠️ 开发者工具箱

访问 ToolSnap 获取Base64编解码、URL编解码、JSON格式化等在线开发者工具。

常见问题(FAQ)

什么是CI/CD?

CI(持续集成)是开发者频繁将代码合并到主分支,每次合并自动触发构建和测试。CD(持续部署/交付)是在CI通过后自动将代码部署到生产环境。目标是减少人工操作、快速发现问题、加快发布节奏。

GitHub Actions和其他CI/CD工具有什么区别?

GitHub Actions与GitHub深度集成,配置简单,免费额度充足。Jenkins功能更强大但需要自建服务器。GitLab CI与GitLab深度集成。CircleCI速度快但免费额度有限。

什么是蓝绿部署和金丝雀发布?

蓝绿部署维护两套环境(蓝/绿),新版本部署到空闲环境验证后切换流量。金丝雀发布是先将新版本推送给少量用户(如5%),观察无问题后逐步扩大范围。两者都是为了降低部署风险。