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

如何在GitHub Actions工作流中将作业拆分为独立的build和deploy

拆分GitHub Actions构建与部署作业的解决方案

以下是拆分后的完整工作流配置,解决了作业间产物共享的核心问题:

name: Deploy to Firebase Hosting on merge to Develop
'on':
  push:
    branches:
      - develop
jobs:
  build:
    name: Build Application
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1
        with:
          node-version: '15'
      - run: npm ci
      - name: Create .env file
        env:
          REACT_APP_API_KEY: ${{ secrets.REACT_APP_API_KEY }}
          REACT_APP_FIREBASE_API_KEY: ${{ secrets.REACT_APP_FIREBASE_API_KEY }}
          REACT_APP_FIREBASE_AUTHDOMAIN: ${{ secrets.REACT_APP_FIREBASE_AUTHDOMAIN }}
          REACT_APP_FIREBASE_PROJECTID: ${{ secrets.REACT_APP_FIREBASE_PROJECTID }}
          REACT_APP_FIREBASE_STORAGEBUCKET: ${{ secrets.REACT_APP_FIREBASE_STORAGEBUCKET }}
          REACT_APP_FIREBASE_MESSAGINGSENDERID: ${{ secrets.REACT_APP_FIREBASE_MESSAGINGSENDERID }}
          REACT_APP_FIREBASE_APPID: ${{ secrets.REACT_APP_FIREBASE_APPID }}
        run: |
          touch .env
          echo REACT_APP_API_KEY="$REACT_APP_API_KEY" >> .env
          echo FAST_REFRESH=false >> .env
          echo REACT_APP_FIREBASE_API_KEY="$REACT_APP_FIREBASE_API_KEY" >> .env
          echo REACT_APP_FIREBASE_AUTHDOMAIN="$REACT_APP_FIREBASE_AUTHDOMAIN" >> .env
          echo REACT_APP_FIREBASE_PROJECTID="$REACT_APP_FIREBASE_PROJECTID" >> .env
          echo REACT_APP_FIREBASE_STORAGEBUCKET="$REACT_APP_FIREBASE_STORAGEBUCKET" >> .env
          echo REACT_APP_FIREBASE_MESSAGINGSENDERID="$REACT_APP_FIREBASE_MESSAGINGSENDERID" >> .env
          echo REACT_APP_FIREBASE_APPID="$REACT_APP_FIREBASE_APPID" >> .env
      - run: npm run build
      # 上传构建产物到GitHub Artifacts,供deploy作业使用
      - name: Upload Build Artifact
        uses: actions/upload-artifact@v3
        with:
          name: build-output
          path: build/

  deploy:
    name: Deploy to Firebase Hosting
    runs-on: ubuntu-latest
    needs: build # 确保构建完成后再执行部署
    steps:
      - uses: actions/checkout@v2 # 拉取仓库配置文件(如firebase.json)
      # 下载build作业生成的构建产物
      - name: Download Build Artifact
        uses: actions/download-artifact@v3
        with:
          name: build-output
          path: build/
      - name: Deploy to Firebase
        uses: w9jds/firebase-action@v11.22.0
        with:
          args: deploy --only hosting
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

  run_tests:
    name: Run autotests
    needs: deploy # 调整依赖为deploy,确保部署完成后触发测试
    runs-on: ubuntu-latest
    steps:
      - name: Trigger E2E Tests
        run: |
          curl -X POST https://api.github.com/repos/*****/FootballAppE2ETests/dispatches \
          -H 'Accept: application/vnd.github.everest-preview+json' \
          -u ${{ secrets.ACTIONS_KEY }} \
          --data '{"event_type": "Trigger Workflow", "client_payload": { "repository": "'"$GITHUB_REPOSITORY"'" }}'
      - uses: actions/checkout@v3

关键改动说明

  • 作业拆分与依赖:将原build_and_deploy拆分为build和deploy两个独立作业,通过needs字段定义执行顺序,确保部署在构建完成后启动。
  • 产物共享:GitHub Actions不同作业运行在独立虚拟机中,通过actions/upload-artifact和actions/download-artifact实现构建产物的跨作业传递,解决拆分后部署找不到构建文件的核心问题。
  • 依赖调整:将run_tests的依赖从原build_and_deploy改为deploy,保证测试在部署完成后触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:52:18