定时任务
1079 字约 4 分钟
简介
流水线一般为主动触发,比如 Git 操作、页面操作或 API 调用等。也可以配置为定时任务,在指定的时间点执行。
新增定时任务
如下面示例配置了一个定时任务流水线。
# 定时任务流水线配置在 main 分支
# 当定时任务触发时,拉取 main 分支代码进行构建
main:
# 用户 A 提交定时任务流水线配置,定时任务触发时触发者为 A
"crontab: 30 5,17 * * *": # 定时任务按照配置的时间触发
- name: crontab-a
stages:
- name: test
script: echo 1
配置解析
这部分内容将会将定时流水线每部分的配置格式和含义进行详细解释。
main
此处和普通流水线一样,可以填写仓库中的已存在分支名。含义为,定时任务执行时所采用的代码。 比如写为 main
,那么当流水线执行时候,会采用 main
分支的 HEAD
处代码。
为提高资源利用率,定时任务分支名不支持
glob
表达式,只能是明确的分支名。
crontab: 30 5,17 * * *
作为对比,其他流水线一般是某个操作触发的事件,如 push
、 web_trigger
、api_trigger
,是一次性、主动触发的事件。
而定时任务依据配置的 cron
规则定时触发,填写的格式为 crontab: ${CRON}
。
crontab:
为定时流水线事件名固定前缀。${CRON}
为实际的执行时机,格式为标准POSIX cron
语法。
如上面配置会每天在 Asia/Shanghai
时间 5:30 和 17:30 时各触发一次执行。
定时任务流水线在执行时,会以定时任务负责人作为流水线触发人,负责人是把定时任务配置(添加或变更)推送到仓库的用户。
为了提供更可靠的服务,我们限制了定时任务最小的时间间隔为 5 分钟,低于 5 分钟间隔的定时任务(例如:
* * * * *
)将无法成功添加。
修改定时任务
普通事件修改流水线配置比较直观,修改定时任务可修改三个部分内容:
- 触发时机:例如
30 5,17 * * *
->0 9 * * *
,修改触发时间。 - 流水线配置:修改
stages
和env
内容等。 - 负责人:修改定时任务的操作者会被视为定时任务的负责人,定时任务流水线触发时作为流水线触发者。
main:
# 用户 B 更新了定时任务流水线配置,定时任务触发时触发者为 B
"crontab: 30 5,17 * * *": # 修改了执行时间,定时任务按照新的时间触发
- name: crontab-b
stages:
- name: test
script: echo 2
当定时任务负责人被移除仓库时,定时任务流水线会失败,可通过修改定时任务配置内容重新推送以更新负责人。
删除定时任务
流水线配置文件修改对应分支下 cron
表达式相当于删除了原本的定时任务,新增一个 cron
表达式对应的定时任务。
若流水线配置文件下无 cron
表达式则意味着删除了该分支下所有的定时任务。
main:
# 删除了上文中的定时任务
远端仓库删除分支时会删除对应的分支下所有的定时任务。
仓库删除时会删除其下所有定时任务。
对比
以 push
事件为例,下面是定时任务和 push
事件对比表格,可以帮助您更好的了解这两者之间的差异。
特性 | 定时任务 | push事件 |
---|---|---|
触发机制 | 基于时间的 cron 规则 | 代码推送触发 |
分支配置 | 使用明确的分支名称 | 支持使用 glob 表达式的分支名称 |
负责人 | 由配置任务的人触发执行 | 由事件发起者触发执行 |
最小间隔 | 任务调度的最小间隔为 5 分钟 | 没有特定的最小间隔要求 |
修改 | 修改触发时机、流水线配置、负责人 | 直接修改流水线配置 |
删除 | 修改 cron 表达式以删除或添加任务 | 删除流水线配置会移除流水线 |