定时流水线
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
使用定时流水线来定期运行 GitLab CI/CD 流水线。
前置条件
要运行定时流水线,需要满足以下条件:
- 计划所有者必须拥有 Developer 角色。对于受保护分支上的流水线, 计划所有者必须被 允许合并 到该分支。
.gitlab-ci.yml文件必须具有有效的语法。
否则,流水线不会被创建,也不会显示任何错误消息。
添加流水线计划
要添加流水线计划:
- 在左侧边栏,选择 Search or go to 并找到您的项目。
- 选择 Build > Pipeline schedules。
- 选择 New schedule 并填写表单。
- Interval Pattern:选择预配置的间隔之一,或以 cron 表示法 输入自定义 间隔。您可以使用任何 cron 值,但定时流水线的运行频率不能超过实例的 最大定时流水线频率。
- Target branch or tag:选择流水线的分支或标签。
- Inputs:为流水线
spec:inputs部分中定义的任何 inputs 设置值。 这些输入值在每次定时流水线运行时都会使用。一个计划最多可以有 20 个输入。 - Variables:向计划添加任意数量的 CI/CD variables。 这些变量仅在定时流水线运行时可用,在其他任何流水线运行中都不可用。建议使用 inputs 而非变量进行流水线配置, 因为它们提供更好的安全性和灵活性。
如果项目已达到 最大流水线计划数量, 您必须先删除未使用的计划才能添加新的。
编辑流水线计划
流水线计划的所有者可以编辑它:
- 在左侧边栏,选择 Search or go to 并找到您的项目。
- 选择 Build > Pipeline schedules。
- 在计划旁边,选择 Edit ( ) 并填写表单。
用户必须至少拥有项目的 Developer 角色。如果用户不是计划的所有者, 他们必须先 take ownership 该计划。
手动运行
要手动触发流水线计划,使其立即运行而不是在下一个计划时间运行:
- 在左侧边栏,选择 Search or go to 并找到您的项目。
- 选择 Build > Pipeline schedules。
- 在列表右侧,对于 您要运行的流水线,选择 Run ( )。
您每分钟可以手动运行一次定时流水线。
当您手动运行定时流水线时,流水线以触发它的用户的权限运行, 而不是以计划所有者的权限运行。
接管所有权
定时流水线以拥有该计划用户的权限执行。流水线可以访问与流水线所有者相同的资源, 包括 受保护的环境 和 CI/CD job token。
要接管由其他用户创建的流水线的所有权:
- 在左侧边栏,选择 Search or go to 并找到您的项目。
- 选择 Build > Pipeline schedules。
- 在列表右侧,对于 您想成为所有者的流水线,选择 Take ownership。
您需要至少拥有 Maintainer 角色才能接管由其他用户创建的流水线。
相关主题
故障排除
在使用流水线计划时,您可能会遇到以下问题。
短引用被扩展为完整引用
当您向 API 提供短 ref 时,它会自动扩展为完整的 ref。
此行为是预期的,确保资源标识明确。
API 同时接受短引用(如 main)和完整引用(如 refs/heads/main 或 refs/tags/main)。
模糊引用
在某些情况下,API 无法自动将短 ref 扩展为完整的 ref。这可能在以下情况发生:
- 您提供了短
ref(如main),但存在同名的分支和标签。 - 您提供了短
ref,但不存在该名称的分支或标签。
要解决此问题,请提供完整的 ref 以确保正确识别资源。
查看和优化流水线计划
为防止因过多流水线同时启动导致的 过度负载, 您可以查看和优化您的流水线计划。
要获取所有现有计划的概览并识别更均匀分布的机会:
-
运行以下命令提取和格式化计划数据:
outfile=/tmp/gitlab_ci_schedules.tsv sudo gitlab-psql --command " COPY (SELECT ci_pipeline_schedules.cron, projects.path AS project, users.email FROM ci_pipeline_schedules JOIN projects ON projects.id = ci_pipeline_schedules.project_id JOIN users ON users.id = ci_pipeline_schedules.owner_id ) TO '$outfile' CSV HEADER DELIMITER E'\t' ;" sort "$outfile" | uniq -c | sort -n -
查看输出来识别流行的
cron模式。 例如,您可能会看到许多计划设置为在每小时开始时运行(0 * * * *)。 -
调整计划以创建错开的
cron模式,特别是对于大型仓库。 例如,不要让多个计划在每小时开始时运行,而是将它们分散在整小时内(5 * * * *、15 * * * *、25 * * * *)。
定时流水线突然变为非活动状态
如果定时流水线状态意外变为 Inactive,可能是因为
计划所有者被阻止或移除了。接管所有权
该计划以修改和激活它。