default关键字用于全局设置job默认镜像,未显式声明image的job自动采用该值,已定义则直接覆盖;支持与timeout、before_script等共存,并可配合tags约束Runner类型。

在 Linux 环境下使用 GitLab CI 时,default 关键字是统一设置所有 job 默认容器镜像最简洁、最推荐的方式。它不是强制继承,而是提供“初始值”——每个 job 若不显式声明 image,就自动采用该默认镜像;若已定义,则直接覆盖,互不干扰。
在 .gitlab-ci.yml 中配置 default image
把 default: 块放在文件顶部(全局作用域),紧接在 stages 或 variables 之后即可:
- 写法示例(使用官方 Node 镜像):
default:
image: node:18-alpine
- 这个配置会让所有未指定
image的 job 自动运行在node:18-alpine容器中 - 支持完整镜像地址,比如私有仓库镜像:
image: registry.example.com/my-team/base:ubuntu22.04 - 可与其他 default 项共存,例如同时设默认超时或 before_script:
default:
image: python:3.11-slim
timeout: 20 minutes
before_script:
- apt-get update && apt-get install -y curl
default image 和 job 级 image 的优先级关系
GitLab 明确规定:job 内定义的 image 总是优先于 default.image。这种覆盖机制让配置既统一又灵活:
在 OpenClaw 中管理 GitHub 仓库、Pull Request、Issue 与工作流。适用于审查 PR、管理 Issue、自动化 GitHub Actions、同步仓库等场景。
- 全局用
python:3.11,但某个测试 job 需要兼容旧版:单独写image: python:2.7 - 全局用基础镜像,构建 job 却需 Docker-in-Docker 能力:改用
image: docker:20.10.16并配services - 镜像覆盖不依赖标签是否“相似”,只看是否显式声明 —— 即使 job 写了
image: alpine:latest,也完全跳过 default
配合 tags 实现环境隔离(常见生产实践)
仅靠 image 不足以保证任务跑在正确类型的 Runner 上。建议在 default 中一并约束执行节点:
- 示例(限定所有默认 job 必须由带
docker标签的 Runner 执行):
default:
image: node:18-alpine
tags:
- docker
- 这样即使某 job 没写
tags,也不会误跑在 shell 或 kubernetes 类 Runner 上 - 如某个 job 需专用 GPU Runner,可单独覆盖:
tags: [gpu, cuda12]
验证配置是否生效的小技巧
提交修改后,在流水线详情页点开任意一个未声明 image 的 job,查看“Job output”顶部日志:
- 正常情况会显示类似:
Using docker image sha256:abc123... for node:18-alpine with digest node:18-alpine@sha256:... - 如果看到的是
Using docker image sha256:xyz789...且镜像名与 default 不符,说明该 job 实际用了其他镜像(可能被 include 引入的模板覆盖,或存在隐式继承) - 用
gitlab-ci-lint工具本地校验语法,避免缩进或冒号遗漏导致 default 未被识别










