为什么不使用 Github Action 自带的 schedule
官方对与 schedule 的定义
Scheduled events(预定事件) The Schedule event allows you to trigger a workflow at a scheduled time.(该Schedule事件允许您在预定时间触发工作流。)
Note: The Schedule event can be delayed during periods of high loads of GitHub Actions workflow runs. High load times include the start of every hour. To decrease the chance of delay, schedule your workflow to run at a different time of the hour.
注意:Schedule在 GitHub 操作工作流运行的高负载期间,事件可能会延迟。高负载时间包括每小时开始。为了减少延迟的可能性,请安排您的工作流在不同的时间运行。
从官方的定义可以看出,schedule 是到了设置的时间把你的任务加入一个待执行队列,如果这时队列出现了拥堵的情况,最糟糕的可能是超过定时时间 1-2 小时还没有执行。也就是说对于执行时间比较敏感的任务,建议使用第三方 cron 平台。
如何使用 cron-job 实现精确的定时任务
repository_dispatch
是 GitHub Actions 中的一个事件类型,它允许您通过使用 GitHub API 手动触发存储库中的工作流程运行。所以我们可以使用 cron-job 定时调用 Github 的 API,实现精准的定时执行。
1. 更改action文件的触发条件
添加repository_dispatch
on: |
2. 获取 Personal access tokens
在个人 Github 的 Settings/Developer Settings 创建 token
选择创建经典的 token
选择 token 权限为 repo
此时就获得了你的 token,保存好。
3. 配置 cron-job
注册完成后进入控制台,可以在右上角设置中文
需要填写
改为下图内容,需要定时执行哪一个工作流就把对应内容粘贴到网址中
https://api.github.com/repos/需要填写/dispatches |
然后在进阶选项中添加标头和请求内容
标头键为 Authorization 值为 token 刚才获取的token
请求体为
{ |
此时保存后进行测试,显示 204 即为成功,此时你对应的 Github Action 便就执行成功了