{{< details >}}

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署

{{< /details >}}

使用定时流水线以在规定的时间间隔运行极狐GitLab CI/CD 流水线

前提条件

要运行定时流水线:

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

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

添加流水线定时

{{< history >}}

  • 输入选项在极狐GitLab 17.11 中引入。

{{< /history >}}

要添加一个流水线定时:

  1. 在左侧边栏中,选择 搜索或前往 并找到您的项目。
  2. 选择 构建 > 流水线定时
  3. 选择 新建定时 并填写表单。
    • 时间间隔模式: 选择一个预配置的时间间隔,或以 cron 表示法输入自定义间隔。您可以使用任何 cron 值,但定时流水线不能比实例的最大定时流水线频率更频繁运行。
    • 目标分支或标签: 选择流水线的分支或标签。
    • 输入: 为您的流水线的 spec:inputs 部分定义的任何输入设置值。这些输入值在每次定时流水线运行时使用。一个定时最多可以有 20 个输入。
    • 变量: 添加任意数量的 CI/CD 变量到定时中。这些变量仅在定时流水线运行时可用,而在其他任何流水线运行时不可用。建议使用输入来进行流水线配置,而不是变量,因为它们提供了更好的安全性和灵活性。

如果项目已经有最大数量的流水线定时,则必须删除未使用的定时,才能添加新的。

编辑流水线定时

流水线定时的所有者可以编辑它:

  1. 在左侧边栏中,选择 搜索或前往 并找到您的项目。
  2. 选择 构建 > 流水线定时
  3. 在定时旁边,选择 编辑 ({{< icon name=”pencil” >}}) 并填写表单。

用户必须具有项目的开发者角色或以上。如果用户不是定时的所有者,他们必须首先取得所有权

手动运行

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

  1. 在左侧边栏中,选择 搜索或前往 并找到您的项目。
  2. 选择 构建 > 流水线定时
  3. 在列表的右侧,为您想要运行的流水线,选择 运行 ({{< icon name=”play” >}})。

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

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

取得所有权

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

要取得由不同用户创建的流水线的所有权:

  1. 在左侧边栏中,选择 搜索或前往 并找到您的项目。
  2. 选择 构建 > 流水线定时
  3. 在列表的右侧,为您想要成为所有者的流水线,选择 取得所有权

您需要至少维护者角色才能取得由不同用户创建的流水线的所有权。

相关主题

疑难解答

处理流水线定时时,您可能会遇到以下问题。

简短引用被扩展为完整引用

当您向 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,可能是因为定时的所有者被阻止或移除。取得所有权以修改和激活定时。