计划流水线
使用计划流水线定期运行 GitLab CI/CD 流水线。
先决条件
要运行计划流水线:
- 计划所有者必须具有开发人员角色。对于受保护分支上的流水线,必须允许计划所有者合并到分支。
-
.gitlab-ci.yml
文件必须有正确的语法。
否则,不会创建流水线。不显示错误消息。
添加计划流水线
添加流水线计划:
- 在左侧边栏中,选择 搜索或转到 并找到您的项目。
- 在左侧边栏中,选择 构建 > 流水线计划。
- 选择 新建计划 并填写表格。
- 循环周期:选择预配置的间隔之一,或以 cron 表示法输入自定义间隔。您可以使用任何 cron 值,但计划流水线的运行频率不能超过实例的最大计划流水线频率。
- 目标分支或标签:选择流水线的分支或标签。
- 变量:将任意数量的 CI/CD 变量 添加到计划中。这些变量仅在计划流水线运行时可用,而不是在任何其它流水线运行时可用。
如果项目已经有最大数量的流水线计划,您必须先删除未使用的计划,然后才能添加另一个。
编辑流水线计划
流水线计划的所有者可以对其进行编辑:
- 在左侧边栏中,选择 搜索或转到 并找到您的项目。
- 在左侧边栏中,选择 构建 > 流水线计划。
- 在计划旁边,选择 编辑 () 并填写表格。
用户必须具有项目的开发者或以上角色。如果用户不是计划的所有者,他们必须首先取得所有权。
手动运行
手动触发流水线计划,使其立即运行而不是在下一个计划时间:
- 在左侧边栏中,选择 搜索或转到 并找到您的项目。
- 在左侧边栏中,选择 构建 > 流水线计划。
- 在列表右侧,对于您要运行的流水线,选择 运行 ()。
您可以每分钟手动运行一次计划流水线。
当您手动运行计划的流水线,则流水线以触发人员的权限在运行,而不是以计划所有者的权限运行。
取得所有权
计划流水线以拥有计划的用户的权限执行。流水线可以访问与流水线所有者相同的资源,包括受保护的环境和 CI/CD 作业令牌。
要获得由其他用户创建的流水线的所有权:
- 在左侧边栏中,选择 搜索或转到 并找到您的项目。
- 在左侧边栏中,选择 构建 > 流水线计划。
- 在列表右侧,对于您要成为所有者的流水线,选择 取得所有权。
要想获取其他用户创建的流水线的所有权,您至少需要维护者角色。
故障排查
当计划流水线工作时,您可能会遇到以下问题。
短 refs 不能够扩展为完成 refs
当您为 API 提供了一个短 ref
时,它会自动扩展为完整 ref
。此行为是预期的,并确保明确标识资源。
API 能够接受短 ref
(例如 main
)和完整 ref
(例如 refs/heads/main
或 refs/tags/main
)。
任意 refs
在有些情况下,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
,可能是因为计划所有者被阻止或移除了。取得所有权计划来修改和激活它。