无法获取已上传Artifact ID,GitHub Actions跨仓库下载求助
跨私有仓库下载GitHub Actions Artifact解决方案
问题1:获取Artifact ID的curl命令无输出
你的curl命令存在三个关键问题:
- Authorization令牌未填充:
-H "Authorization: Bearer "后缺少实际的PAT令牌,需替换为-H "Authorization: Bearer ${{secrets.PAT_TOKEN}}" - 命令换行格式错误:Workflow中多行bash命令必须用
\结尾,否则会被截断执行 - PAT权限不足:需确保你的PAT拥有
repo和actions权限(私有仓库必须)
修复后的获取Artifact ID命令:
- name: Get artifact ID run: | curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer ${{secrets.PAT_TOKEN}}" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO_A/actions/artifacts -o artifact.json - name: Extract artifact ID run: | # 假设取最新的artifact ID,可根据name筛选 ARTIFACT_ID=$(jq -r '.artifacts[0].id' artifact.json) echo "ARTIFACT_ID=$ARTIFACT_ID" >> $GITHUB_ENV
问题2:用run_id下载得到URL而非zip文件
你使用的API端点错误,/runs/${{github.run_id}}artifacts/zip不是有效的下载端点。正确流程是:
- 先获取目标run的所有artifacts列表
- 提取对应artifact的ID
- 使用
/artifacts/{ARTIFACT_ID}/zip端点下载
完整的跨仓库下载Workflow示例(仓库B中执行):
jobs: build: runs_on: [self-hosted] steps: - name: Checkout code uses: actions/checkout@v2 - name: JDK 11 setup uses: actions/setup-java@v2 with: java-version: '11' distribution: 'zulu' - name: Fetch artifacts from Repo A run: | curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer ${{secrets.PAT_TOKEN}}" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO_A/actions/runs/{TARGET_RUN_ID}/artifacts -o run_artifacts.json # 替换{TARGET_RUN_ID}为仓库A中生成artifact的run ID,或根据name筛选 ARTIFACT_ID=$(jq -r '.artifacts[] | select(.name=="YOUR_ARTIFACT_NAME").id' run_artifacts.json) echo "ARTIFACT_ID=$ARTIFACT_ID" >> $GITHUB_ENV - name: Download artifact from Repo A run: | curl -L \ -u ${{secrets.PAT_TOKEN}}: \ -o myartifact.zip \ https://api.github.com/repos/OWNER/REPO_A/actions/artifacts/${{env.ARTIFACT_ID}}/zip - name: Verify artifact run: | unzip -t myartifact.zip
额外优化建议
- 若知道仓库A中artifact的名称,可直接用
actions/download-artifactaction简化流程(需传递PAT):
- name: Download artifact from Repo A uses: actions/download-artifact@v3 with: name: YOUR_ARTIFACT_NAME repo: OWNER/REPO_A path: ./downloads env: GITHUB_TOKEN: ${{secrets.PAT_TOKEN}}
内容的提问来源于stack exchange,提问作者Shrishti
相关产品推荐
相关产品推荐

