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

GitHub Actions上传文件至GCS失败,求排查解决方法

问题分析与解决方案

核心原因

GitHub Actions的每个Job运行在独立的虚拟机环境中,Job之间的文件系统完全隔离。你的create_zip Job里虽然上传了artifact,但google_cloud_services Job没有执行下载artifact的操作,自然找不到./downloads/jobs.zip文件。另外,create_zip Job里的Download zip file artifact步骤完全多余——同一个Job内刚上传的artifact不需要下载,也无法跨Job共享文件。

解决步骤

  1. 移除冗余步骤:删除create_zip Job中的Download zip file artifact步骤。
  2. 在目标Job中下载Artifact:在google_cloud_services Job里添加下载jobs artifact的步骤,确保文件能被访问到。
  3. 可选调试步骤:添加目录查看命令,确认文件是否存在,方便排查路径问题。

修正后的完整Workflow代码

name: CI Workflow

on:
  push:
    branches:
      - main

env:
  PROJECT_ID: "flights-429420"
  BUCKET_NAME: "flights-cicd-bucket"

jobs:
  create_zip:
    runs-on: ubuntu-latest
    needs: test
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        
      - name: Install zip
        run: sudo apt-get install zip

      - name: Create jobs.zip
        run: |
          cd app
          zip -r ../jobs.zip jobs
      - name: Upload zip file
        uses: actions/upload-artifact@v3
        with:
          name: jobs
          path: jobs.zip

  google_cloud_services:
    runs-on: ubuntu-latest
    needs: create_zip
    steps:
      - uses: actions/checkout@v3
      
      # 新增:下载create_zip上传的artifact
      - name: Download jobs artifact
        uses: actions/download-artifact@v3
        with:
          name: jobs
          path: ./downloads
      
      # 可选:调试用,查看下载后的文件结构
      - name: Verify artifact exists
        run: ls -la ./downloads
      
      - name: Authenticate with GCP using Service Account
        uses: 'google-github-actions/auth@v2'
        with:
          credentials_json: ${{ secrets.GCP_ACCOUNT_KEY }}
      
      - name: Setup GCP CLI
        uses: 'google-github-actions/setup-gcloud@v2'
        with:
          project_id: ${{ env.PROJECT_ID }} # 修正原代码变量名不匹配问题
          install_components: 'gsutil'
      
      - name: Create GCS bucket if not exists
        run: |
          if ! gsutil ls -b gs://${{ env.BUCKET_NAME }}/; then
            gsutil mb -l EU gs://${{ env.BUCKET_NAME }}/
          fi
      
      - name: Upload files to GCS
        run: |
          gsutil cp ./downloads/jobs.zip gs://${{ env.BUCKET_NAME }}/jobs.zip
          gsutil cp app/main.py gs://${{ env.BUCKET_NAME }}/main.py
          gcloud storage objects update gs://${{ env.BUCKET_NAME }}/main.py --content-type=application/octet-stream

额外注意点

  • 原代码中setup-gcloud步骤的project_id引用了未定义的GCP_PROJECT_ID,已修正为env中定义的PROJECT_ID,避免GCP项目设置失败。
  • 如果不需要拆分Job,也可以把打包和上传GCS的步骤合并到同一个Job里,省去artifact传递的步骤,提高执行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:30:12