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

如何通过Github Action构建React应用,再通过AWS CodeDeploy部署到EC2?

可行实现方案

你当前的问题核心是两点:

  1. Github Action中不同Job运行在完全独立的Runner实例上,build阶段生成的/build、node_modules等产物默认不会传递到deploy阶段
  2. 使用--github-location参数时CodeDeploy只会拉取对应提交的原始仓库代码,不会包含CI流程中生成的动态产物

正确的实现方式是走「S3中转构建产物包」的流程,不需要把构建产物提交到Git仓库,修改后的工作流配置如下:


修改后的完整工作流配置

name: Deploy to staging

on:
  push:
    branches: [master]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      # 安装依赖、构建
      - name: npm install for Server
        run: npm ci

      - name: npm install in client DIR and build
        run: |
          cd client
          npm ci
          npm run build
        env:
          CI: false

      # 上传构建产物和部署所需文件到Action缓存,供deploy阶段使用
      - name: Upload build artifacts
        uses: actions/upload-artifact@v4
        with:
          name: deploy-package
          # 这里列出所有需要部署到EC2的文件/文件夹,按需调整
          path: |
            ./
            !.git/
            !.github/

  deploy:
    needs: build
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/master'
    steps:
      # 下载build阶段上传的所有产物
      - name: Download build artifacts
        uses: actions/download-artifact@v4
        with:
          name: deploy-package

      - name: Configure AWS credentials
        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: us-east-1

      # 把所有部署文件打包成zip上传到S3
      - name: Upload deployment package to S3
        run: |
          zip -r deploy-package.zip .
          aws s3 cp deploy-package.zip s3://${{ secrets.S3_DEPLOY_BUCKET_NAME }}/deploy-package-${{ github.sha }}.zip

      # 触发CodeDeploy,从S3拉取产物包部署
      - name: Create CodeDeploy Deployment
        run: |
          aws deploy create-deployment \
            --application-name "app-name" \
            --deployment-group-name "deply-app-ec2" \
            --deployment-config-name CodeDeployDefault.OneAtATime \
            --s3-location bucket=${{ secrets.S3_DEPLOY_BUCKET_NAME }},key=deploy-package-${{ github.sha }}.zip,bundleType=zip

前置配置要求

  • 提前在AWS S3中创建一个专属的部署包存储桶,把桶名存入Github仓库的Secrets中,命名为S3_DEPLOY_BUCKET_NAME
  • 给Github Action使用的AWS IAM用户增加S3桶的上传权限、CodeDeploy的部署创建权限
  • 给CodeDeploy的服务角色增加对应S3桶的读取权限
  • 确保你仓库根目录的appspec.yml配置正确,部署脚本的路径和执行逻辑匹配上传的产物结构

内容的提问来源于stack exchange,提问作者Stanley Moon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:57:00