避免常见的 GitLab CI/CD 错误——规则陷阱、静默失败和 YAML 合并陷阱。
规则 : 规则 : 和 / 例外 : 无法混合 —— 每种工作使用其中一种是一项面向实际任务的技能,主要用于第一次匹配规则胜出 —— 在一般规则之前设置特定规则;错过时: 默认为成功 —— 规则。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
rules: 与 only:/except: 不能混用 — 每个 job 中只能使用其中一种when: 时默认为 on_success — 例如 rules: - if: $CI_COMMIT_TAG 仅在打 tag 时运行rules: [] 表示永不运行 — 这与完全不定义 rules 的行为不同- when: never 防止“穿透执行”(fallthrough)— 否则未匹配任何条件的 job 仍可能运行docker:dind — 会触发难以理解的 Docker 错误extends: 不支持数组深度合并 — script、variables 等数组会被整体替换,而非追加!reference [.job, script] 实现复用 — 例如:script: [!reference [.base, script], "my command"]include: 引入的文件之间可能发生键冲突 — 相同 key 以最后引入的文件内容为准&/* 无法跨文件生效 — 跨文件复用请改用 extends:dependencies: []needs: 默认下载所依赖 job 的 artifacts — 如需跳过,可写为 needs: [{job: x, artifacts: false}]DOCKER_HOST: tcp://docker:2375 — 否则 job 将连接到错误的 Docker 守护进程DOCKER_TLS_CERTDIR: "" 或正确配置 TLS — TLS 配置不完整会导致构建失败CI_PIPELINE_SOURCE 的取值取决于触发方式 — 可能为 push、merge_request_event、schedule、api 或 triggerrules: - if: $CI_MERGE_REQUEST_IID — 仅靠分支规则不足以覆盖 MR 场景