你可以基于时间的计划调度,使用定时任务 (Cron
调度器) 执行流水线作业。你可以从存储库的 设置页 (Settings),或使用命令行工具来创建和管理 Cron 作业。
-
用一个
Cron
表达式创建了一个名为hourly
的定时任务示例:1
$ drone cron add "octocat/hello-world" "hourly" "0 0 * * * *"
-
用一个预先定义的计划表创建一个名为
deploy
的定时任务示例。1
$ drone cron add "octocat/hello-world" "deploy" @daily
请注意,Drone Cloud 上的 Cron 调度功能是禁用的。该功能仅在自部署版本中可用。
表达式
Cron
表达式使用 6 个空格分隔的字段表示一组时间,其中也包括秒。
互联网上的大多数例子都是用 5 个空格分隔的字段来表示时间,并排除了秒。但排除秒会导致意外的预期。
字段名 | 是否强制? | 允许的值 | 允许使用的字符 |
---|---|---|---|
秒数 | 是 | 0-59 | * / , - |
分钟数 | 是 | 0-59 | * / , - |
小时 | 是 | 0-23 | * / , - |
月的日期 | 是 | 1-31 | * / , - ? |
月份 | 是 | 1-12 or JAN-DEC | * / , - |
周的日期 | 是 | 0-6 or SUN-SAT | * / , - ? |
使用几个预定义的计划调度指令之一来代替 Cron
表达式。
指令 | 表达式 | 描述 |
---|---|---|
@yearly | 0 0 0 1 1 * | 每年运行一次,1 月 1 日凌晨 12 点 (12:00 a.m)。 |
@monthly | 0 0 0 1 * * | 每月运行一次,每月 1 日的凌晨 12 点 (12:00 a.m) |
@weekly | 0 0 0 * * 0 | 每周运行一次,周六/日之间的凌晨 12 点 (12:00 a.m) |
@daily | 0 0 0 * * * | 每天运行一次,凌晨 12 点 (12:00 a.m) |
@hourly | 0 0 * * * * | 每小时运行一次,每小时的开始 |
时区
目前的实施是基于 UTC 而不是本地时间来计算执行时间的。
计划调度
Cron 调度器
近似于每小时分批执行作业。这意味着 Cron
作业可以在预定执行时间后一小时内被处理,而高频率调度的作业每小时只能执行一次。这可以防止用户创建高频率的作业并使系统过载,但结果是意味着 Cron
调度的时间不那么精确。
你可以通过改变服务器的 Cron
间隔设置来减少一小时的窗口期,并提高调度的准确性。
流水线
Cron 调度器
会执行你的 yaml
配置文件中定义的所有匹配的流水线和步骤。参见流水线配置文档,以限制 Cron
执行流水线和流水线步骤。