default 块是什么
default 是 GitLab CI 的全局配置块:集中声明 image、before_script、cache、tags 等公共项,减少每个作业的重复声明。它面向全局默认,一次变更影响所有未覆盖它的作业;extends 则面向模板继承。用 default 收敛重复配置很划算,但改动前要在个别作业试点,全量回滚只能靠提交回退。
基本信息
| 支持键 | image、services、before_script、cache、tags、retry 等 |
|---|---|
| 覆盖 | 作业内声明覆盖 default 值 |
| 对比 | extends 面向模板继承,default 面向全局默认 |
| 影响 | 全局生效,变更需谨慎 |
| 回滚 | 靠提交回退,先试点再全量 |
| 适用 | 同构作业多、公共配置重复的仓库 |
| 排查 | 作业行为异常先看 default 与作业级覆盖顺序 |
| 变更流程 | 全局项修改单独提合并请求,说明影响范围 |
全局默认示例
全局默认示例
default:
image: registry.example.com/ci-base:1.9 # 全局基础镜像
before_script:
- source ci/env.sh # 每作业前置
tags: [docker] # 默认 Runner 标签
build:
script: make build # 沿用 default 配置典型使用场景
- 收敛重复:几十个作业不再各自写镜像与前置脚本
- 基础镜像升级:改一处全局生效,先试点再推广
- Runner 选型:统一标签让作业落到同一执行池
- 缓存策略:全局缓存键规则,作业可覆盖
- 分级配置:default 管全局,extends 管模板,作业管特例
- 排查:作业行为异常时先看 default 与覆盖顺序
- 影响评估:改动全局项前先列出受影响的作业清单
配置项与影响
| 配置 | 全局影响 | 覆盖方式 |
|---|---|---|
| image | 所有作业基础环境 | 作业内 image 覆盖 |
| before_script | 每作业前置命令 | 作业内声明替换 |
| cache | 缓存键与路径 | 作业内 cache 覆盖 |
| tags | 作业调度目标 | 作业内 tags 覆盖 |
| retry | 失败重试策略 | 作业内 retry 覆盖 |
基础镜像升级先在一两个作业试点,再提升为 default 版本。
直接改 default 镜像:全部流水线同时受影响,回滚只能靠提交回退。
before_script 承担重初始化:每作业重复耗时,慢操作应固化进基础镜像。
default 与 extends 用途别混:模板继承场景用 extends,全局默认才用 default。
大型仓库按目录拆分文件:全部塞进一个配置时,默认与覆盖关系会越来越难维护。