强制实施30分钟构建间隔 | AI生成和翻译

Home 2025.10

修改工作流程以强制构建间隔30分钟

为确保您的Jekyll部署工作流程不会运行过于频繁(即连续运行之间至少间隔30分钟),您可以在build作业的早期添加条件步骤。该步骤将通过查询GitHub API获取此工作流程最近一次成功运行的时间戳。如果当前触发时间距离上次运行完成时间不足30分钟,作业将提前退出并显示消息(跳过构建)。

此方案特点:

更新后的YAML代码片段

将此新步骤插入到build作业的”检出代码库”步骤之后。工作流程其余部分保持不变。

jobs:
  build:
    runs-on: ubuntu-latest
    environment: github-pages
    env:
      GITHUB_TOKEN: $
      TELEGRAM_BOT_API_KEY: $
      OPENROUTER_API_KEY: $

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 5

      - name: Enforce 30-Minute Build Gap
        id: cooldown
        env:
          GITHUB_TOKEN: $
        run: |
          # 获取此工作流程最近一次成功运行记录
          RUNS_RESPONSE=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
            -H "Accept: application/vnd.github.v3+json" \
            "https://api.github.com/repos/$/actions/workflows/$/runs?status=completed&conclusion=success&per_page=1&sort=timestamp&direction=desc")

          # 提取最近成功运行的completed_at时间戳(ISO 8601格式)
          LAST_COMPLETED_AT=$(echo "$RUNS_RESPONSE" | jq -r '.[0].completed_at // empty')
          
          if [ -z "$LAST_COMPLETED_AT" ] || [ "$LAST_COMPLETED_AT" = "null" ]; then
            echo "未找到先前成功运行记录。继续执行构建。"
            echo "skip_build=false" >> $GITHUB_OUTPUT
            exit 0
          fi

          # 将时间戳转换为Unix秒数用于比较
          CURRENT_TIME=$(date -u +%s)
          LAST_TIME=$(date -d "$LAST_COMPLETED_AT" +%s)
          TIME_DIFF=$((CURRENT_TIME - LAST_TIME))

          echo "最近成功运行完成时间: $LAST_COMPLETED_AT (时间差: ${TIME_DIFF}秒)"

          if [ $TIME_DIFF -lt 1800 ]; then  # 1800秒 = 30分钟
            echo "构建已跳过:距离上次成功运行不足30分钟。"
            echo "skip_build=true" >> $GITHUB_OUTPUT
            exit 0
          else
            echo "时间间隔符合要求。继续执行构建。"
            echo "skip_build=false" >> $GITHUB_OUTPUT
            exit 0
          fi

      # 若冷却检查未通过则跳过整个构建(为后续步骤添加此条件或将构建步骤包裹在if中)
      - name: Set up Python 3.13.2
        if: steps.cooldown.outputs.skip_build != 'true'
        uses: actions/setup-python@v4
        with:
          python-version: "3.13.2"

      # ...(在此之后的所有剩余步骤重复添加'if: steps.cooldown.outputs.skip_build != 'true''条件)

关键变更说明

  1. API查询
    • 使用curl调用GitHub Actions API的工作流运行端点
    • 筛选status=completedconclusion=success仅获取已完成的成功运行
    • 限制per_page=1并按timestamp desc排序获取最近记录
    • 提取completed_at(上次运行的确切结束时间)
  2. 时间计算
    • 使用date将当前时间和上次完成时间转换为Unix时间戳
    • 计算秒级时间差
    • 若小于1800秒,设置skip_build=true并提前退出步骤
  3. 条件执行
    • 每个后续步骤添加if: steps.cooldown.outputs.skip_build != 'true'(例如Python设置、安装依赖直至同步构建站点)
    • 确保冷却触发时作业在GitHub界面显示”skipped”,同时记录原因
  4. 处理的边缘情况
    • 无历史运行记录:继续执行(首次构建)
    • 失败/进行中的历史运行:忽略并继续执行
    • API错误:默认继续执行(安全回退)
    • jq已预装在ubuntu-latest环境中,无需额外设置

测试变更

替代方案

若此方案与您的具体需求不符(例如您希望实现至少每30分钟调度),请提供更多细节!


Back

x-ai/grok-4-fast

Donate