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

GitHub Action监控页面变更:无法下载历史工件求助

解决GitHub Action无法获取历史工件的问题

首先明确:你提到的方案1(始终触发同一个工作流实例)无法实现,GitHub Action的每个触发事件(定时任务、push等)都会生成独立的工作流运行实例,不存在复用实例的机制,每个run都是完全独立的环境,所以这个思路直接放弃。

下面是方案2的具体实现步骤,以及更稳定的替代方案:

方案2:获取上一次成功运行的工件

步骤1:配置工作流权限

先给工作流的GITHUB_TOKEN添加读取工作流运行和工件的权限,在工作流顶部追加:

permissions:
  contents: read
  actions: read
  artifacts: read

步骤2:获取上一次成功运行的Run ID

用GitHub CLI获取最近一次成功运行的同工作流ID,添加步骤:

- name: Get last successful run ID
  id: get-run-id
  run: |
    RUN_ID=$(gh run list --workflow "job run" --limit 1 --status success --json id --jq '.[0].id')
    echo "run-id=$RUN_ID" >> $GITHUB_OUTPUT
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

注:第一次运行时该命令会返回空值,后续脚本需要处理这种无历史数据的场景,比如直接生成初始基准文件。

步骤3:下载对应Run的工件

修改actions/download-artifact步骤,指定run-id参数:

- name: Download last successful artifact
  if: steps.get-run-id.outputs.run-id != ''
  uses: actions/download-artifact@v3
  with:
    name: archive
    run-id: ${{ steps.get-run-id.outputs.run-id }}

处理工作流失败的情况

如果需要兼容最近一次运行失败的场景,可以调整gh run list命令,列出多个历史run并过滤出第一个成功的:

RUN_ID=$(gh run list --workflow "job run" --limit 5 --status success --json id --jq '.[0].id')

只取成功run的工件,因为失败run生成的文件大概率不完整,没有对比价值。

替代方案:将历史数据提交到仓库

如果觉得依赖artifact不够稳定,也可以把历史CSV文件提交到仓库的专用分支(比如history-data),用Git存储历史数据:

步骤1:配置写入权限

在工作流顶部追加写入权限:

permissions:
  contents: write

步骤2:更新并提交历史数据

添加以下步骤替换原有的artifact下载/上传逻辑:

- name: Checkout or create history branch
  run: git checkout history-data || git checkout -b history-data

- name: Copy history files (if exists)
  run: |
    if [ -f spider_old.csv ]; then
      cp spider_old.csv ./
    fi
    if [ -f cats_old.txt ]; then
      cp cats_old.txt ./
    fi

- run: npm i
- run: node monitor.js

- name: Commit and push history data
  run: |
    git config --global user.name "GitHub Actions"
    git config --global user.email "actions@github.com"
    git add spider_old.csv cats_old.txt
    git commit -m "Update history data $(date +'%Y-%m-%d')" || echo "No changes to commit"
    git push origin history-data

这种方案无需依赖artifact,直接用Git仓库存储历史数据,既能稳定留存,也方便查看历史版本。

调整后的完整工作流示例(方案2)

name: job run
run-name: Check page change and mail the result.
on: 
  push:
  schedule:
    - cron: '0 10 * * *'
permissions:
  contents: read
  actions: read
  artifacts: read
jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '16'
      - name: Get last successful run ID
        id: get-run-id
        run: |
          RUN_ID=$(gh run list --workflow "job run" --limit 1 --status success --json id --jq '.[0].id')
          echo "run-id=$RUN_ID" >> $GITHUB_OUTPUT
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Download last successful artifact
        if: steps.get-run-id.outputs.run-id != ''
        uses: actions/download-artifact@v3
        with:
          name: archive
          run-id: ${{ steps.get-run-id.outputs.run-id }}
      - run: npm i
      - run: node monitor.js
      - uses: actions/upload-artifact@v3
        with:
          name: archive
          path: |
            cats_old.txt
            spider_old.csv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:01:18