GitHub Flow 简化版:敏捷开发的分支管理

GitHub Flow 是一种轻量级分支管理策略,专为持续交付设计。其核心原则是主分支始终可部署,所有变更通过特性分支完成。简化版流程如下:

核心步骤
  1. 主分支(main)
    始终处于可部署状态,禁止直接提交代码。

  2. 创建特性分支
    基于 main 创建新分支命名如 feat/user-authfix/button-style

    git checkout -b feat/new-feature main
    

  3. 本地开发与提交
    在特性分支上开发并频繁提交:

    git add .
    git commit -m "添加用户登录验证逻辑"
    

  4. 推送与 PR
    推送分支到远程仓库,创建 Pull Request (PR)

    git push origin feat/new-feature
    

  5. 代码审查与 CI 验证

    • 团队成员审查代码
    • 自动触发 CI 流水线(测试/构建)
  6. 合并与部署
    PR 批准后合并到 main,自动触发 CD 部署


CI/CD 集成示例 (GitHub Actions)

以下为 Node.js 项目的完整 CI/CD 配置:

文件路径:.github/workflows/ci-cd.yml
name: CI/CD Pipeline

on:
  push:
    branches: [ main, feat/** ]   # 监听 main 和所有特性分支
  pull_request:
    branches: [ main ]            # PR 目标为 main 时触发

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    
    - name: Setup Node
      uses: actions/setup-node@v3
      with:
        node-version: 18
        
    - run: npm ci                 # 安装依赖
    - run: npm test               # 执行单元测试

  build:
    needs: test                   # 依赖 test 任务
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - run: npm run build          # 构建生产包
    - uses: actions/upload-artifact@v3
      with:
        name: production-build
        path: dist/

  deploy:
    needs: build
    if: github.ref == 'refs/heads/main'  # 仅 main 分支触发部署
    runs-on: ubuntu-latest
    steps:
    - uses: actions/download-artifact@v3
      with:
        name: production-build
        
    - name: Deploy to Production
      uses: appleboy/ssh-action@v0.1.10
      with:
        host: ${{ secrets.PROD_SERVER }}
        username: deploy-user
        key: ${{ secrets.SSH_KEY }}
        script: |
          sudo systemctl stop my-app
          rm -rf /opt/app/*
          cp -r ./* /opt/app/
          sudo systemctl start my-app

流程说明
  1. CI 阶段(PR 触发)

    • 自动运行测试和构建
    • 在 PR 页面显示检查结果
  2. CD 阶段(main 合并触发)

    • 自动部署到生产服务器
    • 通过 SSH 执行零停机部署 $$ \text{部署时间} = T_{\text{传输}} + T_{\text{切换}} \leq 30\text{s} $$
  3. 密钥管理
    PROD_SERVERSSH_KEY 通过 GitHub Secrets 安全存储


最佳实践

  1. 分支策略

    • 特性分支生命周期 ≤ 2 天
    • 命名规范:feat/fix/docs/ 前缀
  2. 部署安全

    • 生产部署需至少 1 人批准 PR
    • 回滚方案:快速重部署前次 commit
  3. 监控集成
    部署后自动触发:

    curl -X POST https://monitor.example.com/notify \
      -d "status=deployed&commit=$GITHUB_SHA"
    

此方案实现:

  • 每日多次部署能力
  • 从开发到部署平均时间 ≤ 15 分钟
  • 100% 变更通过自动化验证
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐