12 使用时间表触发器进行GitHub Actions自动化
在上一篇中,我们探讨了GitHub Actions中的常见事件类型,这些事件可以在不同的情境下触发工作流。然而,有时我们需要根据特定的时间安排来自动执行工作流,这就需要用到时间表触发器。
什么是时间表触发器?
时间表触发器允许你在指定的时间安排下运行GitHub工作流。这种触发器通常用于定期的维护任务、报告生成或任何需要在特定时间点自动化执行的任务。时间表触发器使用 cron
表达式来定义执行计划。
要在工作流中定义一个时间表触发器,可以在工作流YAML文件的 on
关键字下使用 schedule
触发器。
如何定义时间表触发器?
下面是一个使用时间表触发器的简单例子:
name: Scheduled Workflow
on:
schedule:
- cron: '0 0 * * *' # 每天午夜 00:00 UTC 执行
jobs:
run-scheduled-task:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Run a scheduled task
run: echo "This task runs daily at midnight UTC."
解析 cron
表达式
在上面的例子中,cron: '0 0 * * *'
表达式定义了每天下午0点0分(UTC)执行工作流。cron
表达式的格式为:
* * * * * <command>
- - - - -
| | | | |
| | | | +---- 从星期几(0-7)(0和7都表示星期日)
| | | +------ 从月份(1-12)
| | +-------- 从月份中的天数(1-31)
| +---------- 从小时(0-23)
+------------ 从分钟(0-59)
可以根据需要修改 cron
表达式,例如,若希望工作流每小时执行一次,可以将其改为 cron: '0 * * * *'
。
注意事项
-
时区:GitHub Actions中的时间表触发器默认使用UTC时间。确保你在编写
cron
表达式时考虑到时区的问题。 -
限制:请注意,GitHub对时间表触发器有一定的限制。例如,工作流最少需要每5分钟执行一次,并且最多只能有500个计划的工作流。
-
调试和测试:时间表触发器的工作流不会在定义后立即触发,因此在测试时,可以使用手动触发的方式,或者将
cron
时间设置得更短,进行多次测试。
结合实际案例
假设我们有一个需要定期检查网站可用性的任务,每天的早上8点执行一次,我们可以这样定义工作流:
name: Check Website Availability
on:
schedule:
- cron: '0 8 * * *' # 每天早上8点UTC执行
jobs:
check-website:
runs-on: ubuntu-latest
steps:
- name: Check if the website is up
run: |
STATUS=$(curl -o /dev/null -w '%{http_code}' -s https://example.com)
if [ $STATUS -ne 200 ]; then
echo "Website is down! Status code: $STATUS"
exit 1
else
echo "Website is up! Status code: $STATUS"
fi
在这个案例中,我们创建了一个简单的工作流,它会在每天的早上8点检查 https://example.com
是否可用。如果返回的状态码不是200,它将打印一条消息并退出,表示网站不可用。
总结
使用时间表触发器,你可以灵活地安排工作流在特定时间点自动执行,为你的项目日常维护和管理提供了便利。在下一篇教程中,我们将继续研究作业与步骤的并行与串行执行,这将帮助你更好地组织工作的执行效率。