首页/开发/CI/CD 与发布速查/流水线变量分层
流水线设计54 条

流水线变量分层

变量来自多处(平台配置、作业级、触发时注入、下游传递),同名覆盖按优先级生效:合并规则必须在团队内说清。

CI/CD 与发布速查开发更新于 2026-10-13

流水线变量分层是什么

流水线变量来自多处:平台级的项目/组/实例变量、作业内 variables、触发时注入、父子管道传递。同名变量按平台定义的优先级覆盖生效,合并规则必须在团队内写清楚,否则「为什么生效的不是我以为的值」会反复出现。调试第一步永远是确认变量的作用域与来源,而不是先改值。

基本信息

来源项目/组/实例变量、作业级 variables、触发时覆盖、父管道传递
优先级以 GitLab《CI/CD variable precedence》与 GitHub 环境作用域定义为准
实践只在有必要处覆盖;敏感变量走受保护与掩码机制
命名加前缀区分用途(DEPLOY_、SCAN_),降低撞名概率
调试先确认变量来自哪个作用域,再排查覆盖顺序

典型使用场景

  • 多环境部署:TARGET_ENV 由触发或环境定义,管道复用同一套脚本
  • 父子管道:父管道把版本号传给子管道,避免各自解析
  • 覆盖率阈值:按分支覆写阈值,主干更严
  • 敏感参数:密钥走受保护变量,只在受保护分支可见
  • 排查行为差异:同一管道在不同环境取值不同,逐层定位来源
  • 秘密轮换:变量值更新走配置管理,改完跑一次验证管道
  • 文档化:把覆盖顺序整理成一页贴进仓库说明

GitLab 触发时覆盖

GitLab 触发时覆盖
deploy:
  variables:
    TARGET_ENV: staging
  script: ./ci/deploy.sh

来源与覆盖

来源作用范围覆盖关系
实例/组变量全部项目层级最低
项目变量单项目可被作业覆盖
作业 variables单作业就近生效
触发时注入本次管道可覆盖上游同值
调试时先打印变量来源与作用域,再排查「为什么生效的不是我以为的值」。
命名即文档:前缀化命名让来源一目了然,评审时也容易发现冲突。
同值不同源是事故温床:部署前打印最终生效值(注意掩码),比事后排查便宜。

易错点

  • 同名变量多处定义:排查耗时集中在覆盖顺序上,减少层级是根本解法
  • 在脚本里加 set -x 打印逻辑:变量值可能被日志记录,敏感值依赖掩码兜底
  • 掩码没开就打印:未掩码的密钥直接进日志,暴露后必须轮换
  • 复用平台内置变量名:内置变量(如 CI_ 前缀)被覆盖会导致行为怪异,命名先查清单
  • 变量拼进命令不加引号:值含空格或特殊字符时解析错误,加引号防展开

数据来源与参考

  • GitLab Docs《CI/CD variable precedence》
  • GitHub Docs《Variables》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌