You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub与AWS中实现Development/Staging/Production环境自动部署?

ECS多环境CI/CD(基于GitHub Actions)部署方案

前置准备

  • 提前在AWS端创建Production、Staging两套独立的ECS集群、任务定义(Task Definition)、服务(Service),以及对应的ECR镜像仓库
  • 在AWS IAM中创建CI/CD专用权限用户,授予ECS、ECR相关操作权限,生成AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,连同AWS区域、ECR仓库地址、两套环境的ECS集群名、服务名、任务定义名、容器名一并存入GitHub仓库的Secrets配置中
  • 代码仓库遵循Git Flow规范管理:main分支作为生产和预发的基线分支,feature分支用于新功能开发,hotfix分支用于紧急问题修复

工作流配置

在仓库中创建.github/workflows/ecs-deploy.yml文件,内容如下:

name: ECS自动部署
on:
  push:
    branches: [ main ] # main分支有合并操作时触发预发部署
    tags: [ 'v*' ] # main分支打v开头的正式tag时触发生产部署

jobs:
  deploy-to-ecs:
    runs-on: ubuntu-latest
    environment: ${{ startsWith(github.ref, 'refs/tags/') && 'production' || 'staging' }}
    steps:
      - name: 拉取仓库代码
        uses: actions/checkout@v4

      - name: 配置AWS访问凭证
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      - name: 登录ECR镜像仓库
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v2

      - name: 构建并推送镜像到ECR
        id: build-image
        env:
          ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
          ECR_REPOSITORY: ${{ secrets.ECR_REPO_NAME }}
          IMAGE_TAG: ${{ github.sha }}
        run: |
          docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
          docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
          echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT

      - name: 更新ECS任务定义的镜像地址
        id: render-task-def
        uses: aws-actions/amazon-ecs-render-task-definition@v1
        with:
          task-definition: ${{ startsWith(github.ref, 'refs/tags/') ? secrets.ECS_TASK_DEF_PROD : secrets.ECS_TASK_DEF_STAGING }}
          container-name: ${{ secrets.ECS_CONTAINER_NAME }}
          image: ${{ steps.build-image.outputs.image }}

      - name: 部署更新到ECS服务
        uses: aws-actions/amazon-ecs-deploy-task-definition@v1
        with:
          task-definition: ${{ steps.render-task-def.outputs.task-definition }}
          service: ${{ startsWith(github.ref, 'refs/tags/') ? secrets.ECS_SERVICE_PROD : secrets.ECS_SERVICE_STAGING }}
          cluster: ${{ startsWith(github.ref, 'refs/tags/') ? secrets.ECS_CLUSTER_PROD : secrets.ECS_CLUSTER_STAGING }}
          wait-for-service-stability: true

开发环境适配

Development环境无需配置自动部署,团队成员可在本地构建Docker镜像做自测,也可单独创建一套开发环境的ECS资源,新增工作流触发规则为dev分支推送时自动部署,用于功能联调、hotfix验证。

注意事项

  • ECS任务定义可提前从AWS控制台导出为JSON文件存入仓库,也可直接填写AWS端已有的任务定义名称,Action会自动拉取最新版本更新镜像
  • 可在GitHub仓库的Settings->Environments中配置生产环境部署审核权限,避免误发布
  • 镜像标签可按需调整,比如生产环境用发布的tag名称作为镜像标签,方便后续版本回滚

内容的提问来源于stack exchange,提问作者André Castro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:54:00