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

GitHub Actions:如何通过GitHub API下载工作流日志及解决“Not Found”错误?

搞定GitHub Action日志获取的404错误!

嘿,看你的错误信息和配置,问题其实很明显——你调用的API路径写错啦!GitHub的日志API端点是复数的/logs,不是你写的/log,这就是为啥返回Not Found。

下面给你两种靠谱的解决办法,选哪种都行:

方法一:修正curl请求(快速改好你的现有代码)

把curl里的URL改成正确的复数路径,顺便优化下请求(GET请求不需要content-type头,还可以直接把日志ZIP包存下来):

- name: create log
  if: always()
  id: createlog
  run: |
    curl --request GET \
    -H "Accept: application/vnd.github.v3+json" \
    --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \
    https://api.github.com/repos/${{github.repository_owner}}/${{github.repository}}/actions/runs/${{ github.run_id }}/logs \
    -o workflow-logs.zip

这里提两个小细节:

  • 用github.repository_owner替代你原来的github.owner,这个是GitHub官方推荐的上下文变量,更稳妥
  • 加了-o workflow-logs.zip是因为GitHub返回的日志是压缩包,直接存成文件方便你后续查看或者上传为产物

方法二:用官方Action更省心(推荐)

没必要自己写curl折腾,GitHub官方的github-script已经帮你封装好了API调用,代码更简洁还不容易出错:

- name: Download workflow logs
  if: always()
  uses: actions/github-script@v6
  with:
    script: |
      const fs = require('fs');
      const response = await github.rest.actions.downloadWorkflowRunLogs({
        owner: context.repo.owner,
        repo: context.repo.repo,
        run_id: context.runId
      });
      fs.writeFileSync('workflow-logs.zip', Buffer.from(response.data));
    github-token: ${{ secrets.GITHUB_TOKEN }}

这个脚本会自动帮你调用API,把日志ZIP包保存到工作目录里,完全不用你管HTTP请求的细节。

最后再提几点注意事项

  • GitHub的日志API返回的是ZIP压缩包,里面每个步骤的日志都是单独的文件,需要解压才能看具体内容
  • 你配置的if: always()很到位,不管工作流成功还是失败,都会执行日志下载步骤,这点没问题
  • 如果你是私有仓库,只要你已经配置了actions: read权限(你的job里已经加了),GITHUB_TOKEN就有足够权限获取日志

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 21:12:32