定时任务
定时任务
简介
与普通流水线不同,定时流水线的触发方式是定时器。
定时任务格式使用 POSIX cron 语法。
时区使用 Asia/Shanghai。
下面案例中的定时流水线会在每天 Asia/Shanghai 时间 5:30 和 17:30 时执行。在执行时,会以定时任务负责人作为流水线触发人,取 main 分支的代码来运行。
负责人是把定时任务配置(添加或变更)推送到仓库的用户。例如 A 用户将案例的配置推送到 main 分支,
负责人就是 A,后续 B 用户改了 crontab: 30 5,17 * * * 事件中的配置,负责人则变成 B。
当定时任务负责人被移除仓库时,定时任务流水线会失败,可通过修改定时任务配置内容重新推送以更新负责人。
main:
# 普通 push 事件流水线
push:
- stages:
- name: test
script: echo 1
# 定时流水线
'crontab: 30 5,17 * * *':
# 修改内容可重新关联定时任务触发者,建议修改name,改出问题的风险低
- name: crontab-a
stages:
- name: test
script: echo 1
为了提供更可靠的服务,我们限制了定时任务最小的时间间隔为 5 分钟,低于 5 分钟间隔的定时任务(例如:* * * * *)将无法成功添加。
配置解析
这部分内容将会将定时流水线每部分的配置格式和含义进行详细解释。
main:
'crontab: 30 5,17 * * *':
- stages:
- name: test
script: echo 1
main
此处和普通流水线一样,可以填写仓库中的已存在分支名。含义为,定时流水线执行时所采用的代码。
比如写为 main,那么当流水线执行时候,会采用 main 分支的 HEAD 处代码。
为提高资源利用率,定时任务流水线分支名不支持
glob表达式,只能是明确的分支名。
crontab: 30 5,17 * * *
普通流水线一般是某个操作触发的事件,如 push 或者 pull_request,是一次性的事件。
但是定时流水线是用定时器触发,填写的格式为 crontab: ${CRON}。
crontab:为定时流水线事件名固定前缀。${CRON}为实际的执行时间,格式为标准POSIX cron语法。
点评
流水线缓存
流水线构建过程中,通过缓存依赖和中间产物,可以显著减少构建时间和提高效率。流水线在云平台的多个构建节点上运行,默认每个仓库的流水线分配到固定的3个节点,缓存包括代码和项目依赖、构建缓存等文件。通过构建Docker缓存镜像,可以实现跨节点共享同一份缓存 。
跳过流水线
文本主要介绍了跳过流水线的方法和事件忽略的情形。在 `push`、`commit.add` 和 `branch.create` 事件中,当最近的一个提交信息包含 `[ci skip]` 或 `[skip ci]`,或者在 `git push` 命令中使用 `-o ci.skip` 参数时,可以主动跳过流水线;同时 `云原生构建` 会忽略密钥仓库的文件变更等特定情形下的事件,以避免无意义的流水线运行。