Help us learn about your current experience with the documentation. Take the survey.

定时流水线

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

使用定时流水线来定期运行 GitLab CI/CD 流水线

前置条件

要运行定时流水线,需要满足以下条件:

  • 计划所有者必须拥有 Developer 角色。对于受保护分支上的流水线, 计划所有者必须被 允许合并 到该分支。
  • .gitlab-ci.yml 文件必须具有有效的语法。

否则,流水线不会被创建,也不会显示任何错误消息。

添加流水线计划

要添加流水线计划:

  1. 在左侧边栏,选择 Search or go to 并找到您的项目。
  2. 选择 Build > Pipeline schedules
  3. 选择 New schedule 并填写表单。
    • Interval Pattern:选择预配置的间隔之一,或以 cron 表示法 输入自定义 间隔。您可以使用任何 cron 值,但定时流水线的运行频率不能超过实例的 最大定时流水线频率
    • Target branch or tag:选择流水线的分支或标签。
    • Inputs:为流水线 spec:inputs 部分中定义的任何 inputs 设置值。 这些输入值在每次定时流水线运行时都会使用。一个计划最多可以有 20 个输入。
    • Variables:向计划添加任意数量的 CI/CD variables。 这些变量仅在定时流水线运行时可用,在其他任何流水线运行中都不可用。建议使用 inputs 而非变量进行流水线配置, 因为它们提供更好的安全性和灵活性。

如果项目已达到 最大流水线计划数量, 您必须先删除未使用的计划才能添加新的。

编辑流水线计划

流水线计划的所有者可以编辑它:

  1. 在左侧边栏,选择 Search or go to 并找到您的项目。
  2. 选择 Build > Pipeline schedules
  3. 在计划旁边,选择 Edit ( pencil ) 并填写表单。

用户必须至少拥有项目的 Developer 角色。如果用户不是计划的所有者, 他们必须先 take ownership 该计划。

手动运行

要手动触发流水线计划,使其立即运行而不是在下一个计划时间运行:

  1. 在左侧边栏,选择 Search or go to 并找到您的项目。
  2. 选择 Build > Pipeline schedules
  3. 在列表右侧,对于 您要运行的流水线,选择 Run ( play )。

您每分钟可以手动运行一次定时流水线。

当您手动运行定时流水线时,流水线以触发它的用户的权限运行, 而不是以计划所有者的权限运行。

接管所有权

定时流水线以拥有该计划用户的权限执行。流水线可以访问与流水线所有者相同的资源, 包括 受保护的环境CI/CD job token

要接管由其他用户创建的流水线的所有权:

  1. 在左侧边栏,选择 Search or go to 并找到您的项目。
  2. 选择 Build > Pipeline schedules
  3. 在列表右侧,对于 您想成为所有者的流水线,选择 Take ownership

您需要至少拥有 Maintainer 角色才能接管由其他用户创建的流水线。

相关主题

故障排除

在使用流水线计划时,您可能会遇到以下问题。

短引用被扩展为完整引用

当您向 API 提供短 ref 时,它会自动扩展为完整的 ref。 此行为是预期的,确保资源标识明确。

API 同时接受短引用(如 main)和完整引用(如 refs/heads/mainrefs/tags/main)。

模糊引用

在某些情况下,API 无法自动将短 ref 扩展为完整的 ref。这可能在以下情况发生:

  • 您提供了短 ref(如 main),但存在同名的分支和标签。
  • 您提供了短 ref,但不存在该名称的分支或标签。

要解决此问题,请提供完整的 ref 以确保正确识别资源。

查看和优化流水线计划

为防止因过多流水线同时启动导致的 过度负载, 您可以查看和优化您的流水线计划。

要获取所有现有计划的概览并识别更均匀分布的机会:

  1. 运行以下命令提取和格式化计划数据:

    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
  2. 查看输出来识别流行的 cron 模式。 例如,您可能会看到许多计划设置为在每小时开始时运行(0 * * * *)。

  3. 调整计划以创建错开的 cron 模式,特别是对于大型仓库。 例如,不要让多个计划在每小时开始时运行,而是将它们分散在整小时内(5 * * * *15 * * * *25 * * * *)。

定时流水线突然变为非活动状态

如果定时流水线状态意外变为 Inactive,可能是因为 计划所有者被阻止或移除了。接管所有权 该计划以修改和激活它。