使用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桶
临时排查步骤
- 登录DO控制台,查看对应应用的部署日志,确认DO拉取的代码是否为最新版本,构建过程是否有报错
- 检查DO应用的构建配置,确认分支、构建命令、输出目录是否正确
内容的提问来源于stack exchange,提问作者Cameron Hanton
相关产品推荐
相关产品推荐

