Sublime Text 不校验 .gitlab-ci.yml 语义,仅高亮语法;需结合 yamllint(结构校验)和 gitlab-ci-lint(GitLab 语义校验),并手动绑定 YAML (GitLab CI) 语法、配置 SublimeLinter 路径与规则。

GitLab CI YAML 文件在 Sublime 里不报错,但 pipeline 失败了
不是 Sublime 有问题,是它默认根本不校验 .gitlab-ci.yml——右下角显示 “YAML” 只代表语法高亮,不是语义校验。漏个 script:、缩进错一格、用错 needs: 语法,Sublime 不会标红,等 git push 后 GitLab 才返回 yaml invalid 错误。
必须分两层防御:
- 第一层:靠
yamllint检查基础结构(冒号、缩进、重复 key) - 第二层:靠
gitlab-ci-lint检查 GitLab 特有语义(如rules:嵌套、parallel:类型、include:路径合法性)
只配 yamllint 不够,它不认识 trigger: 或 resource_group:;只靠 GitLab Web UI 的 lint 工具又太晚,没法本地预检。
SublimeLinter 怎么接入 gitlab-ci-lint
gitlab-ci-lint 是 GitLab 官方 CLI 工具,不是 npm 包,得手动下载二进制并硬编码路径——Sublime 不继承终端 PATH,双击启动时根本找不到它。
操作步骤:
- 从 GitLab releases 页面 下载对应平台的
gitlab-ci-lint(Linux/macOS 无后缀,Windows 是.exe) - 放固定路径,比如
/usr/local/bin/gitlab-ci-lint(macOS/Linux)或C:\tools\gitlab-ci-lint.exe(Windows) - 打开 Sublime →
Preferences → Package Settings → SublimeLinter → Settings,加这段:
{
"linters": {
"gitlabcilint": {
"executable": ["/usr/local/bin/gitlab-ci-lint"],
"args": ["--format", "json"],
"disable": false
}
}
}
注意:executable 必须是数组;名字是 gitlabcilint(无连字符),不是 gitlab-ci-lint;--format json 让输出能被插件解析。
为什么 yamllint 对 .gitlab-ci.yml 校验不准
yamllint 默认规则不理解 GitLab CI 特有字段,比如它会把 cache: 下的 key: 当作普通 map,无法识别 key: files: 这种嵌套写法是否合法;也不会警告 artifacts: 里用了已废弃的 untracked:。
必须给 yamllint 加自定义规则:
- 项目根目录建
.yamllint,内容包含:
extends: default
rules:
key-duplicates: enable
line-length: disable
# 允许 GitLab CI 常见缩进深度(如 jobs > script > - shell 命令)
indentation:
indent-sequences: true
check-multi-line-strings: false
然后在 SublimeLinter 设置里指定配置路径:
"linters": {
"yamllint": {
"args": ["-c", "/full/path/to/.yamllint"]
}
}
否则 yamllint 用全局默认规则,对 CI 文件基本无效。
文件类型绑定必须手动设为 YAML (GitLab CI)
Sublime 默认把 .gitlab-ci.yml 当作 Plain Text 或基础 YAML,导致 stages:、workflow: 等关键字不着色,也影响 linter 插件识别文件上下文。
正确做法:
- 打开任意
.gitlab-ci.yml文件 - 点右下角语言名 →
Open all with current extension as…→ 选YAML (GitLab CI) - 如果没这个选项,先装插件
YAML for GitLab CI(不是 YAML for Kubernetes)
验证:打开文件后,image: 应为绿色,variables: 为蓝色,before_script: 可折叠——只有这样,linter 才会把该文件纳入检查范围,而不是跳过。
真正麻烦的不是装插件,是每层工具链都得自己对齐路径、格式、作用域:Sublime 不知道你用的是哪个 gitlab-ci-lint 版本,yamllint 不认 GitLab 字段,而 GitLab Web UI 的 lint 又不暴露错误位置。本地校验要稳,就得把这三块全钉死。


















