如何在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
相关产品推荐
相关产品推荐

