持续部署

已发行

本章内容概览:

  • GitHub Actions 简介
  • 构建 Docker 镜像
  • 运行自动化测试
  • 部署到 Kubernetes
  • 完整的 CD 流水线

8.1 什么是持续部署?

定义 持续部署通过自动化方式将代码变更部署到生产环境。

CI/CD 区别:

  • CI(持续集成):频繁集成代码,运行自动化测试
  • CD(持续部署):自动部署到生产环境
  • 持续交付:代码随时可部署,但可能手动触发

优势:

  • 快速反馈
  • 降低风险(小批量变更)
  • 提高效率
  • 频繁发布
  • 标准化流程减少错误

8.2 GitHub Actions

GitHub 提供的 CI/CD 平台。

核心概念:

  • Workflow:自动化流程定义
  • Event:触发工作流的事件(push、pull_request)
  • Job:工作流中的作业
  • Step:作业中的单个操作
  • Action:可重用的步骤
  • Runner:执行工作流的服务器

Workflow 文件: .github/workflows/deploy.yml

8.3 构建和部署流程

8.3.1 登录容器仓库

- name: Login to ACR
  uses: azure/docker-login@v1
  with:
    login-server: ${{ secrets.ACR_LOGIN_SERVER }}
    username: ${{ secrets.ACR_USERNAME }}
    password: ${{ secrets.ACR_PASSWORD }}

8.3.2 构建和推送镜像

- name: Build and push
  run: |
    docker build -t registry/video-streaming:${{ github.sha }} .
    docker push registry/video-streaming:${{ github.sha }}

8.3.3 运行测试

- name: Run tests
  run: |
    npm install
    npm test

8.3.4 部署到 Kubernetes

- name: Set kubectl context
  uses: azure/aks-set-context@v3
  with:
    resource-group: ${{ secrets.RESOURCE_GROUP }}
    cluster-name: ${{ secrets.CLUSTER_NAME }}

- name: Deploy to Kubernetes
  run: |
    kubectl set image deployment/video-streaming \
      video-streaming=registry/video-streaming:${{ github.sha }}
图 8.1 持续部署流水线
图 8.1 持续部署流水线

8.4 完整 Workflow 示例

name: Build and Deploy

on:
  push:
    branches: [ main ]

jobs:
  build-test-deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3

    - name: Set up Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '18'

    - name: Install and test
      run: |
        npm ci
        npm test

    - name: Login to ACR
      uses: azure/docker-login@v1
      with:
        login-server: ${{ secrets.ACR_LOGIN_SERVER }}
        username: ${{ secrets.ACR_USERNAME }}
        password: ${{ secrets.ACR_PASSWORD }}

    - name: Build and push
      run: |
        docker build -t ${{ secrets.ACR_LOGIN_SERVER }}/app:${{ github.sha }} .
        docker push ${{ secrets.ACR_LOGIN_SERVER }}/app:${{ github.sha }}

    - name: Deploy to Kubernetes
      uses: azure/k8s-deploy@v4
      with:
        manifests: |
          k8s/deployment.yaml
        images: |
          ${{ secrets.ACR_LOGIN_SERVER }}/app:${{ github.sha }}

8.5 最佳实践

  • 使用 Secrets:存储敏感信息
  • 并行化:并行运行独立任务
  • 缓存:缓存依赖加快构建
  • 通知:部署失败时发送通知
  • 回滚:自动回滚失败的部署

总结

  • 持续部署自动化代码部署到生产环境
  • GitHub Actions 提供完整的 CI/CD 平台
  • Workflow 定义自动化流程
  • 流程:构建 → 测试 → 推送镜像 → 部署
  • Secrets 管理敏感信息
  • 标准化流程提高可靠性和效率

下一章学习自动化测试。

创建于 2026/01/06 更新于 2026/01/06 671 字 阅读约 2 分钟

提交勘误/建议