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

如何根据上一次测试结果停止GitHub Actions定时运行

GitHub Actions 定时任务按需启停方案

需求背景

现有一个执行sanity测试的GitHub Actions工作流,配置如下:

on:
  workflow_dispatch:
  schedule:
    - cron: '*/30 5-20 * * 1-5'

需要实现:

  • 当测试步骤steps.run_tests.outcome != 'success'时,禁用定时触发,仅允许手动触发运行
  • 当手动触发运行测试成功时,恢复定时触发

之前的尝试(未成功)

曾尝试用锁文件存储运行状态,但因GitHub Actions环境临时,文件无法持久化,配置如下:

- name: Lock run 
        if: always() && steps.run_tests.outcome != 'success'
        run: |
          echo "failure" > last_run_status.txt  # Store failure status
            exit 0
      - name: Unlock run
        if: always() && steps.run_tests.outcome == 'success'
        run: |
          echo "success" > last_run_status.txt  # Store success status
          exit 0

可行实现方案

利用GitHub仓库的存储库变量持久化状态,结合定时任务的条件判断来实现启停:

1. 创建存储库变量

进入仓库Settings → Secrets and variables → Variables → New repository variable:

  • 变量名:SCHEDULE_ENABLED
  • 初始值:true

2. 修改工作流触发条件

给定时任务添加条件判断,仅当变量为true时触发:

on:
  workflow_dispatch:
  schedule:
    - cron: '*/30 5-20 * * 1-5'
      if: vars.SCHEDULE_ENABLED == 'true'

3. 完整工作流配置

name: Sanity Tests

on:
  workflow_dispatch:
  schedule:
    - cron: '*/30 5-20 * * 1-5'
      if: vars.SCHEDULE_ENABLED == 'true'

jobs:
  run-tests:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: 执行Sanity测试
        id: run_tests
        run: |
          # 替换为你的实际测试命令
          npm run sanity-test

      - name: 测试失败时禁用定时任务
        if: always() && steps.run_tests.outcome != 'success'
        run: |
          gh variable set SCHEDULE_ENABLED --body "false"
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: 测试成功时启用定时任务
        if: always() && steps.run_tests.outcome == 'success'
        run: |
          gh variable set SCHEDULE_ENABLED --body "true"
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

关键说明

  • 锁文件方案失效原因:GitHub Actions的运行环境是临时容器,生成的文件不会自动持久化到仓库,除非手动提交推送,这会产生冗余提交且无法在定时任务中读取到状态。
  • 权限配置:确保仓库的Workflow权限设置为Read and write permissions(路径:Settings → Actions → General → Workflow permissions),否则GITHUB_TOKEN无法修改存储库变量。
  • 手动触发不受变量限制:无论SCHEDULE_ENABLED状态如何,都可以通过workflow_dispatch手动运行,方便测试成功后恢复定时任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:40:11