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

使用GitHub Actions构建React应用并部署至DigitalOcean App Platform遇阻

问题分析与解决方案

你的方案核心逻辑存在偏差:GitHub Actions中执行的构建流程完全没被DigitalOcean (DO) App Platform用到,最后调用的doctl apps create-deployment只是触发DO基于关联的GitHub仓库代码重新执行它自己的构建部署流程,等于你在Actions里生成的build产物完全没被传递过去,自然看不到预期变更。

问题根源

doctl apps create-deployment的作用是触发DO App Platform重新拉取你预先关联的GitHub仓库代码,执行DO自身配置的构建步骤(比如安装依赖、打包),和你在GitHub Actions里做的构建完全是两个独立流程。

修正方案(二选一)

方案一:让DO App Platform自行负责构建(推荐,更简洁)

直接让DO处理拉代码、构建、部署的全流程,GitHub Actions只负责触发部署(或直接在DO里配置自动部署)。

调整后的Actions脚本:

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Install doctl
        uses: digitalocean/action-doctl@v2
        with:
          token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
      - name: Trigger DO App Platform deployment
        run: doctl apps create-deployment ${{ secrets.PROD_APP_ID }}

配套配置:

  • 在DO App Platform的应用设置中,确认已正确关联你的GitHub仓库和main分支
  • 在DO的应用环境变量里添加CI=false(对应你之前的构建配置)
  • 确认DO的构建命令设置为npm run build,输出目录为build

方案二:GitHub Actions构建后上传产物到DO

如果必须用GitHub Actions做自定义构建(比如特殊环境变量、私有依赖处理),需要把构建产物上传到DO的对象存储(Spaces),再让App Platform指向这个存储桶。

修改后的Actions脚本:

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    env:
      CI: false
      SPACES_BUCKET: your-bucket-name # 替换为你的DO Spaces桶名
      SPACES_REGION: nyc3 # 替换为你的桶区域,比如sgp1、lon1
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm' # 自动缓存npm依赖,无需手动配置路径
      - name: Install dependencies
        run: npm ci # CI环境优先用npm ci,依赖package-lock.json保证一致性
      - name: Build project
        run: npm run build
      - name: Install s3cmd
        run: sudo apt-get install -y s3cmd
      - name: Configure s3cmd for DO Spaces
        run: |
          s3cmd --configure --access_key=${{ secrets.SPACES_ACCESS_KEY }} --secret_key=${{ secrets.SPACES_SECRET_KEY }} --host=${SPACES_REGION}.digitaloceanspaces.com --host-bucket=%(bucket)s.${SPACES_REGION}.digitaloceanspaces.com --no-ssl --signature-v2
      - name: Upload build files to Spaces
        run: s3cmd sync ./build/ s3://${SPACES_BUCKET}/ --delete-removed # 同步并清理旧文件

配套配置:

  • 在DO控制台创建一个Spaces存储桶,开启静态网站托管
  • 在GitHub Secrets中添加SPACES_ACCESS_KEY和SPACES_SECRET_KEY(从DO控制台获取)
  • 在DO App Platform创建静态站点应用,指向这个Spaces桶

临时排查步骤

  1. 登录DO控制台,查看对应应用的部署日志,确认DO拉取的代码是否为最新版本,构建过程是否有报错
  2. 检查DO应用的构建配置,确认分支、构建命令、输出目录是否正确

内容的提问来源于stack exchange,提问作者Cameron Hanton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:32:40