12 使用时间表触发器进行GitHub Actions自动化

在上一篇中,我们探讨了GitHub Actions中的常见事件类型,这些事件可以在不同的情境下触发工作流。然而,有时我们需要根据特定的时间安排来自动执行工作流,这就需要用到时间表触发器。

什么是时间表触发器?

时间表触发器允许你在指定的时间安排下运行GitHub工作流。这种触发器通常用于定期的维护任务、报告生成或任何需要在特定时间点自动化执行的任务。时间表触发器使用 cron 表达式来定义执行计划。

要在工作流中定义一个时间表触发器,可以在工作流YAML文件的 on 关键字下使用 schedule 触发器。

如何定义时间表触发器?

下面是一个使用时间表触发器的简单例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 表达式的格式为:

1
2
3
4
5
6
7
8
* * * * * <command>
- - - - -
| | | | |
| | | | +---- 从星期几(0-7)(0和7都表示星期日)
| | | +------ 从月份(1-12)
| | +-------- 从月份中的天数(1-31)
| +---------- 从小时(0-23)
+------------ 从分钟(0-59)

可以根据需要修改 cron 表达式,例如,若希望工作流每小时执行一次,可以将其改为 cron: '0 * * * *'

注意事项

  1. 时区:GitHub Actions中的时间表触发器默认使用UTC时间。确保你在编写 cron 表达式时考虑到时区的问题。

  2. 限制:请注意,GitHub对时间表触发器有一定的限制。例如,工作流最少需要每5分钟执行一次,并且最多只能有500个计划的工作流。

  3. 调试和测试:时间表触发器的工作流不会在定义后立即触发,因此在测试时,可以使用手动触发的方式,或者将 cron 时间设置得更短,进行多次测试。

结合实际案例

假设我们有一个需要定期检查网站可用性的任务,每天的早上8点执行一次,我们可以这样定义工作流:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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,它将打印一条消息并退出,表示网站不可用。

总结

使用时间表触发器,你可以灵活地安排工作流在特定时间点自动执行,为你的项目日常维护和管理提供了便利。在下一篇教程中,我们将继续研究作业与步骤的并行与串行执行,这将帮助你更好地组织工作的执行效率。

12 使用时间表触发器进行GitHub Actions自动化

https://zglg.work/github-actions-zero/12/

作者

AI免费学习网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论