对 GitLab CI/CD 管道YAML 文件(.gitlab-ci.yml)进行语法校验、检测安全问题和废弃模式,并提供最佳实践建议。
GitLab CI Linter.是一项面向实际任务的技能,主要用于Lint GitLab CI/CD 管道文件用于语法错误,安全问题,失常模式,以及最佳做法的违反.Commands.;All commands.;
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
对 GitLab CI/CD 流水线文件进行语法错误、安全问题、已弃用模式及违背最佳实践等问题的检查。
所有命令均调用内置 Python 脚本 scripts/gitlab_ci_linter.py。
python3 scripts/gitlab_ci_linter.py lint <文件或目录> [--strict] [--format text|json|markdown]
对一个或多个 .gitlab-ci.yml 文件运行全部 lint 规则。若传入目录,则递归扫描所有 *.yml 和 *.yaml 文件。
参数说明:
--strict —— 遇到任意警告(不仅限于错误)即返回退出码 1--format —— 输出格式:text(默认)、json、markdownpython3 scripts/gitlab_ci_linter.py security <文件> [--format text|json|markdown]
聚焦于安全性问题:硬编码密钥(如密码、Token、密钥)、未受保护的变量、特权 runner、使用不安全的 Docker 镜像标签(例如 :latest)、设置了 allow_failure 的安全相关 job。
python3 scripts/gitlab_ci_linter.py stages <文件> [--format text|json|markdown]
列出已定义的 stages 及各 stage 所关联的 jobs,并标出未定义或未被使用的 stage。
python3 scripts/gitlab_ci_linter.py validate <文件> [--format text|json|markdown]
仅做结构验证:检查必需字段是否存在、stage 是否正确定义、job 关键字是否合法、依赖图是否成环(如 needs: 循环引用)、是否存在缺失的 ref 引用等。
stages: 定义stages: 列表中声明的 stagescript: 区块. 开头,但并未作为模板使用script:、before_script: 或 trigger:needs: 依赖图中存在循环引用$CI_* 形式引用allow_failure: truetags: 中请求特权 runner:latest 标签retry: 配置timeout:cache: 中未显式指定 key:artifacts: paths: 模式过于宽泛rules: 或 only:/except:only:/except: 而非推荐的 rules:script: 区块超过 30 行interruptible:coverage: 正则表达式rules: 条目中缺少 when:.gitlab-ci.yml:12 error [missing-script] Job 'deploy' has no script:, before_script:, or trigger: .gitlab-ci.yml:25 warning [missing-timeout] Job 'test' has no timeout: specified .gitlab-ci.yml:31 info [deprecated-only-except] Job 'build' uses only:/except: instead of rules: 3 issues (1 error, 2 warnings)
{
"file": ".gitlab-ci.yml",
"issues": [...],
"summary": {"errors": 1, "warnings": 2, "info": 0}
}
以表格形式汇总结果,包含严重等级(severity)、规则名(rule)、位置(location)和提示信息(message)。
# .gitlab-ci.yml
lint-pipeline:
stage: test
script:
- python3 scripts/gitlab_ci_linter.py lint .gitlab-ci.yml --strict
退出码说明:0 表示无问题;1 表示发现错误(或在 --strict 模式下发现警告)。