定时流水线执行策略
- Tier: Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
- Status: Experiment
此功能的可用性由功能标志控制。 有关更多信息,请查看历史记录。此功能可用于测试,但尚未准备好用于生产环境。
流水线执行策略会在项目的流水线中强制执行自定义 CI/CD 作业。通过定时流水线执行策略,您可以扩展这种强制执行,以固定节奏(每日、每周或每月)运行 CI/CD 作业,确保即使没有新的提交,合规脚本、安全扫描或其他自定义 CI/CD 作业也能被执行。
安排您的流水线执行策略
与在现有流水线中注入或覆盖作业的常规流水线执行策略不同,定时策略会创建新的流水线,这些流水线根据您定义的独立运行。
常见用例包括:
- 定期执行安全扫描以满足合规要求。
- 定期检查项目配置。
- 对非活跃仓库运行依赖项扫描,以检测新发现的漏洞。
- 按计划执行合规报告脚本。
启用定时流水线执行策略
定时流水线执行策略作为实验性功能提供。要在您的环境中启用此功能,请在安全策略配置中启用 pipeline_execution_schedule_policy 实验。.gitlab/security-policies/policy.yml YAML 配置文件存储在您的安全策略项目中:
experiments:
pipeline_execution_schedule_policy:
enabled: true此功能是实验性的,未来版本可能会更改。您应该仅在非生产环境中对其进行彻底测试。由于此功能可能不稳定,您不应在生产环境中使用它。
配置定时流水线执行策略
要配置定时流水线执行策略,请在安全策略项目的 .gitlab/security-policies/policy.yml 文件的 pipeline_execution_schedule_policy 部分添加额外的配置字段:
pipeline_execution_schedule_policy:
- name: 定时流水线执行策略
description: ''
enabled: true
content:
include:
- project: your-group/your-project
file: security-scan.yml
schedules:
- type: daily
start_time: '10:00'
time_window:
value: 600
distribution: random计划配置架构
schedules 部分允许您配置安全策略作业何时自动运行。您可以创建具有特定执行时间和分发窗口的每日、每周或每月计划。
计划配置选项
schedules 部分支持以下选项:
| 参数 | 描述 |
|---|---|
type |
计划类型:daily、weekly 或 monthly |
start_time |
开始计划的 24 小时制时间(HH:MM) |
time_window |
分发流水线执行的时间窗口 |
time_window.value |
持续时间(秒)(最小值:600,最大值:2629746) |
time_window.distribution |
分发方法(目前仅支持 random) |
timezone |
IANA 时区标识符(如果未指定,默认为 UTC) |
branches |
可选数组,包含要安排流水线的分支名称。如果指定了 branches,则流水线仅在指定的分支上运行,并且仅当这些分支存在于项目中时。如果未指定,则流水线仅在默认分支上运行。每个计划最多可提供五个唯一的分支名称。 |
days |
仅与每周计划一起使用:计划运行的日期数组(例如 ["Monday", "Friday"]) |
days_of_month |
仅与每月计划一起使用:计划运行的日期数组(例如 [1, 15],可以包含 1 到 31 的值) |
snooze |
可选配置,用于暂时暂停计划 |
snooze.until |
休眠后计划恢复的 ISO8601 日期和时间(格式:2025-06-13T20:20:00+00:00) |
snooze.reason |
可选文档,解释为何休眠该计划 |
计划示例
使用每日、每周或每月计划。
每日计划示例
schedules:
- type: daily
start_time: "01:00"
time_window:
value: 3600 # 1 小时窗口
distribution: random
timezone: "America/New_York"
branches:
- main
- develop
- staging每周计划示例
schedules:
- type: weekly
days:
- Monday
- Wednesday
- Friday
start_time: "04:30"
time_window:
value: 7200 # 2 小时窗口
distribution: random
timezone: "Europe/Berlin"每月计划示例
schedules:
- type: monthly
days_of_month:
- 1
- 15
start_time: "02:15"
time_window:
value: 14400 # 4 小时窗口
distribution: random
timezone: "Asia/Tokyo"时间窗口分发
为了在将策略应用于多个项目时避免压垮您的 CI/CD 基础设施,定时流水线执行策略通过一些通用规则,在时间窗口内分发流水线的创建:
- 所有流水线都按
random计划。流水线在指定的时间窗口内随机分布。 - 最小时间窗口为 10 分钟(600 秒),最大约为 1 个月(2,629,746 秒)。
- 对于每月计划,如果您指定了某些月份不存在的日期(如 2 月的 31 日),这些运行将被跳过。
- 一个定时策略一次只能有一个计划配置。
休眠定时流水线执行策略
您可以使用休眠功能暂时暂停定时流水线执行策略。在维护窗口、假期期间,或者您需要阻止定时流水线在特定时间段运行时,请使用休眠功能。
休眠工作原理
当您休眠一个定时流水线执行策略时:
- 在休眠期间不会创建新的定时流水线。
- 在休眠之前创建的流水线会继续执行。
- 策略保持启用状态,但处于休眠状态。
- 休眠期结束后,定时流水线执行会自动恢复。
配置休眠
要休眠定时流水线执行策略,请在计划配置中添加一个 snooze 部分:
pipeline_execution_schedule_policy:
- name: 每周安全扫描
description: '每周运行安全扫描'
enabled: true
content:
include:
- project: your-group/your-project
file: security-scan.yml
schedules:
- type: weekly
start_time: '02:00'
time_window:
value: 3600
distribution: random
timezone: UTC
days:
- Monday
snooze:
until: "2025-06-26T16:27:00+00:00" # ISO8601 格式
reason: "关键生产环境部署"until 参数使用 ISO8601 格式指定休眠期何时结束:YYYY-MM-DDThh:mm:ss+00:00,其中:
YYYY-MM-DD:年、月、日T:日期和时间之间的分隔符hh:mm:ss:24 小时制的小时、分钟和秒+00:00:与 UTC 的时区偏移(UTC 用 Z 表示)
例如,2025-06-26T16:27:00+00:00 表示 2025 年 6 月 26 日下午 4:27 UTC。
移除休眠
要在到期时间之前移除休眠,请从策略配置中移除 snooze 部分,或将 until 值设置为过去的日期。
为特定分支安排流水线
默认情况下,计划仅在默认分支上运行。定时流水线执行策略支持分支过滤,这允许您为其他分支安排流水线。使用 branches 属性对项目中的其他重要分支执行定期扫描或检查。
当您在计划中配置 branches 属性时:
- 如果您没有指定任何分支,则定时流水线仅在默认分支上运行。
- 如果您指定了分支,则策略会为项目中实际存在的每个指定分支安排流水线。
- 每个计划最多可指定五个唯一的分支名称。
- 您必须完整指定每个分支名称。不支持通配符匹配。
分支过滤示例
pipeline_execution_schedule_policy:
- name: 扫描多个分支
description: '在 main、staging 和 develop 分支上运行安全扫描'
enabled: true
content:
include:
- project: your-group/your-project
file: security-scan.yml
schedules:
- type: weekly
days:
- Monday
start_time: '02:00'
time_window:
value: 3600
distribution: random
branches:
- main
- staging
- develop
- feature/new-authentication在此示例中,如果所有指定的分支都存在于项目中,则策略会创建四个独立的流水线(每个分支一个)。
要求
要使用定时流水线执行策略:
- 将您的 CI/CD 配置存储在您的安全策略项目中。
- 在您的安全策略项目的 设置 > 常规 > 可见性、项目功能、权限 部分,启用 授予安全策略项目访问 CI/CD 配置 的设置。
- 确保您的 CI/CD 配置包含适用于定时流水线的工作流规则。
安全策略机器人是 GitLab 自动创建的系统账户,用于处理安全策略的执行。当您启用适当的设置时,该机器人会获得访问 CI/CD 配置和运行定时流水线的必要权限。仅当 CI/CD 配置不在公共项目中时,这些权限才是必需的。
注意以下限制:
- 如果未指定分支,定时流水线执行策略仅在默认分支上运行。
- 您可以在
branches数组中指定最多五个唯一的分支名称。 - 时间窗口必须至少为 10 分钟(600 秒),以确保流水线正确分发。
- 每个安全策略项目的定时流水线执行策略数量限制为 1 个策略和 1 个计划。
- 此功能是实验性的,未来版本可能会更改。
- 如果可用的 runner 不足,定时流水线可能会延迟。
- 计划的最大频率为每日。
故障排除
如果您的定时流水线未按预期运行,请按照以下故障排除步骤操作:
- 验证实验标志:确保您的
policy.yml文件的experiments部分设置了pipeline_execution_schedule_policy: enabled: true标志。 - 检查策略访问权限:验证您的安全策略项目是否有权访问 CI/CD 配置:
- 转到安全策略项目的 设置 > 常规 > 可见性、项目功能、权限,并确保启用了"流水线执行策略"设置。
- 验证 CI 配置:
- 检查 CI/CD 配置文件是否存在于指定路径。
- 通过运行手动流水线验证配置是否有效。
- 确保配置包含适用于定时流水线的工作流规则。
- 验证策略配置:
- 确保策略已启用(
enabled: true)。 - 验证计划配置具有正确的格式和有效值。
- 如果您指定了分支,请验证这些分支是否存在于项目中。
- 验证时区设置是否正确(如果已指定)。
- 确保策略已启用(
- 检查日志和活动:
- 检查安全策略项目的 CI/CD 流水线日志是否有任何错误。
- 检查 runner 可用性:
- 确保 runner 可用且配置正确。
- 验证 runner 是否有容量处理计划的任务。