计划流水线

使用计划流水线定期运行 GitLab CI/CD 流水线

先决条件

要运行计划流水线:

  • 计划所有者必须具有开发人员角色。对于受保护分支上的流水线,必须允许计划所有者合并到分支。
  • .gitlab-ci.yml 文件必须有正确的语法。

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

添加计划流水线

添加流水线计划:

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 在左侧边栏中,选择 构建 > 流水线计划
  3. 选择 新建计划 并填写表格。
    • 循环周期:选择预配置的间隔之一,或以 cron 表示法输入自定义间隔。您可以使用任何 cron 值,但计划流水线的运行频率不能超过实例的最大计划流水线频率。
    • 目标分支或标签:选择流水线的分支或标签。
    • 变量:将任意数量的 CI/CD 变量 添加到计划中。这些变量仅在计划流水线运行时可用,而不是在任何其它流水线运行时可用。

如果项目已经有最大数量的流水线计划,您必须先删除未使用的计划,然后才能添加另一个。

编辑流水线计划

流水线计划的所有者可以对其进行编辑:

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 在左侧边栏中,选择 构建 > 流水线计划
  3. 在计划旁边,选择 编辑 ( ) 并填写表格。

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

手动运行

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

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 在左侧边栏中,选择 构建 > 流水线计划
  3. 在列表右侧,对于您要运行的流水线,选择 运行 ( )。

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

当您手动运行计划的流水线,则流水线以触发人员的权限在运行,而不是以计划所有者的权限运行。

取得所有权

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

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

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

要想获取其他用户创建的流水线的所有权,您至少需要维护者角色。

故障排查

当计划流水线工作时,您可能会遇到以下问题。

短 refs 不能够扩展为完成 refs

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

API 能够接受短 ref(例如 main)和完整 ref(例如 refs/heads/mainrefs/tags/main)。

任意 refs

在有些情况下,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,可能是因为计划所有者被阻止或移除了。取得所有权计划来修改和激活它。