mcpField
C
crontap-replace-github-actions-cron

crontap-replace-github-actions-cron

github.com/crontap云与 DevOps1935 次安装6 周前更新
代码仓库

关于 crontap-replace-github-actions-cron

此技能指导将 GitHub Actions 定时任务迁移为由 Crontap 触发的仓库 dispatch,并涵盖工作流调整、令牌配置、切换与验证。

主要功能

  1. 01将定时触发器改为 dispatch
  2. 02配置限定仓库的 GitHub 令牌
  3. 03创建和管理 Crontap 计划
  4. 04验证工作流运行并排查错误

适用场景

  1. 01将仓库工作流从 GitHub cron 迁出
  2. 02维护期间暂停或恢复定时 dispatch
  3. 03切换后检查重复运行

MCP 相关

通过 Crontap MCP 创建、暂停和恢复向 GitHub 发送仓库 dispatch 请求的计划。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/crontap/skills --skill crontap-replace-github-actions-cron

安装后在 Claude Code 中输入/crontap-replace-github-actions-cron确认已加载。

详细介绍

替换 GitHub Actions cron

Crontap 会发送 repository dispatch 请求。GitHub 仍负责运行工作流。

前提条件

使用所需工具前,请先检查这些工具是否可用。如果有任何工具缺失,请停止操作,并向用户提供以下两个选项,且只能提供这两个选项:

  1. 连接 Crontap MCP:https://mcp.crontap.com/mcp。所有 Crontap 套餐均支持 MCP 访问。
  2. 为原始 API 配置 $CRONTAP_CLIENT_ID 和 $CRONTAP_API_KEY。原始 API 访问需要 Ultra 套餐。

在用户选择之前,不要擅自选择路径或继续操作。

  • 确保工作流可安全地重复触发。
  • 创建一个仅限目标仓库使用、并具备 repository dispatch 端点所需权限的细粒度 GitHub 令牌。
  • 将令牌存储在安全的存储位置,并规划其过期时间和轮换方式。
  • 确认所需的 IANA 时区。

更改工作流

将定时触发器替换为手动和 repository dispatch 触发器:

on:
  workflow_dispatch:
  repository_dispatch:
    types: [scheduled-run]

保留 workflow_dispatch 以便手动运行。Crontap 会调用 repository_dispatch。切换完成后,不要保留启用状态的 on.schedule。

工作流

  1. 提交并部署支持 dispatch 的工作流。
  2. 使用不适用于生产环境的工作流路径测试 repository dispatch。
  3. 在约定的切换时间移除旧的 schedule 触发器。
  4. 创建 Crontap 定时任务。
  5. 确认 GitHub 返回 204,并且出现一次工作流运行记录。
  6. 在维护或回滚期间暂停 Crontap 定时任务。

MCP 示例

创建外部 dispatch:

{
  "tool": "create_schedule",
  "arguments": {
    "url": "https://api.github.com/repos/example-org/example-repo/dispatches",
    "text": "every weekday at 09:00",
    "timezone": "Europe/London",
    "method": "POST",
    "headers": {
      "Authorization": "Bearer <fine-grained-token-from-secure-store>",
      "Accept": "application/vnd.github+json",
      "X-GitHub-Api-Version": "2022-11-28",
      "Content-Type": "application/json"
    },
    "body": {
      "event_type": "scheduled-run"
    },
    "label": "GitHub scheduled run"
  }
}

暂停:

{
  "tool": "pause_schedule",
  "arguments": {
    "scheduleId": "<schedule-id>"
  }
}

恢复:

{
  "tool": "resume_schedule",
  "arguments": {
    "scheduleId": "<schedule-id>"
  }
}

REST 备用方案

创建 REST 请求需要 Ultra API 访问权限:

curl --fail-with-body https://api.crontap.com/v1/schedule \
  -X POST \
  -H "ClientId: $CRONTAP_CLIENT_ID" \
  -H "ApiKey: $CRONTAP_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
    "url": "https://api.github.com/repos/example-org/example-repo/dispatches",
    "interval": "0 9 * * 1-5",
    "timezone": "Europe/London",
    "verb": "POST",
    "headers": {
      "Authorization": "Bearer <fine-grained-token-from-secure-store>",
      "Accept": "application/vnd.github+json",
      "X-GitHub-Api-Version": "2022-11-28",
      "Content-Type": "application/json"
    },
    "data": {"event_type": "scheduled-run"},
    "label": "GitHub scheduled run"
  }'

验证

  • 确认已部署的工作流不再包含 on.schedule。
  • 确认 event_type 与工作流的 dispatch 类型完全一致。
  • 验证一次 Crontap 运行对应一次 GitHub 工作流运行。
  • 确认令牌未过期,且仅限所需的仓库和操作。

安全与套餐限制

  • 如果受限的细粒度令牌可用,切勿使用权限宽泛的经典令牌。
  • 对比旧的 GitHub 触发时间记录时,避免假设任务会在整点运行。
  • 确保下游工作流的写入操作具有幂等性。
  • 如果 Crontap 创建请求触及上限或最小执行间隔限制,请展示返回的四档选项,并选择可行的最小选项。

故障排除

  • GitHub 401 表示令牌无效或已过期。
  • GitHub 403 通常表示仓库访问权限或权限不足。
  • GitHub 404 可能是因为令牌无权访问该仓库,且 GitHub 会有意隐藏该仓库。
  • GitHub 422 通常表示事件类型或请求正文无效。
  • 出现重复运行通常表示旧的定时触发器和 Crontap 同时处于启用状态。

参考资料

评论

支持 Markdown