GitLab CI 动态注入参数的核心是让变量可变、可传、可判,通过 variables 定义参数,rules 实现条件执行,artifacts:reports:dotenv 跨作业传递,include+envsubst 动态生成配置,并严格区分敏感与非敏感变量的作用域和安全边界。

GitLab CI 中动态注入参数,核心是让流水线能根据上下文(分支、标签、手动触发、环境变量)自动适配不同行为,而不是写死配置。关键不在于“加参数”,而在于“让参数可变、可传、可判”。
用 variables 定义可变参数并参与逻辑判断
variables 是最基础也最灵活的注入方式,既可在全局、作业级定义,也能从项目设置中继承。它适合传入非敏感的业务参数(如环境名、版本前缀、配置标识):
- 直接在 job 内声明:
deploy-staging: variables: DEPLOY_ENV: "staging" CONFIG_PROFILE: "minimal" script: ./deploy.sh --env "$DEPLOY_ENV" --profile "$CONFIG_PROFILE" - 在项目 Settings → CI/CD → Variables 中预设
PROD_DOMAIN、STAGING_URL等,勾选 Mask 和 Protected 保障安全,脚本中直接引用$PROD_DOMAIN即可。 - 变量支持默认值和空值检测,比如
DEPLOY_ENV: ${CI_ENVIRONMENT_NAME:-"dev"},未设置时自动 fallback。
用 rules + 变量实现条件化执行
单纯定义变量不够,必须让它驱动行为。rules 是现代 GitLab CI 的推荐方式,比 old-style only/except 更精准:
- 单变量判断:
release-job: rules: - if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+$/' when: on_success - when: never - 多条件组合:只在主分支且启用了自动部署时构建镜像:
build-image: rules: - if: '$CI_COMMIT_BRANCH == "main" && $AUTO_BUILD == "true"' - 结合手动触发:用户点击运行时填
TARGET_REGION,流水线据此选择云区域:deploy-cloud: when: manual variables: TARGET_REGION: "us-east-1" script: terraform apply -var "region=$TARGET_REGION"
跨作业传递运行时生成的参数
静态变量不够用?需要上一个 job 的输出结果作为下一个 job 的输入:
- 用
artifacts:reports:dotenv输出环境变量文件:generate-version: script: - echo "APP_VERSION=$(git describe --tags --always)" >> version.env artifacts: reports: dotenv: version.env deploy: needs: ["generate-version"] script: - echo "Deploying version $APP_VERSION" # 自动可用 - 或用
cache临时存 JSON 文件,后续 job 读取解析,适合传结构化数据(如服务端口映射、依赖版本列表)。
配合外部模板或脚本动态生成配置
当参数数量多、组合复杂时,硬写 YAML 易出错。可借助:
-
include+ 变量加载不同环境模板:include: - local: 'ci/templates/$CI_ENVIRONMENT/config.yml' variables: CI_ENVIRONMENT: ${CI_ENVIRONMENT_NAME:-"dev"} - 在 script 中用
envsubst渲染模板文件:script: - envsubst < config.tmpl.yaml > config.yaml
模板里写
${DATABASE_URL}、${SERVICE_PORT},由 CI 变量实时填充。
git摸鱼周报自动化下载生成周报:读取本机 Git 仓库最近一周的提交记录,按项目分类提炼总结,生成标准周报格式,通过微信推送并返回给用户。触发词:周报、weekly report、git总结、提交记录总结、工作周报。
注意变量作用域与安全边界
- 项目级变量(Settings 中配置)优先于 .gitlab-ci.yml 中同名定义;
- 敏感值绝不在 YAML 里明文写,一律走 Settings 配置并勾选 Mask variable;
- 手动触发 job 的输入框只暴露业务参数,凭据类变量由系统自动注入,用户不可见;
- 使用
$CI_PIPELINE_ID、$CI_COMMIT_SHORT_SHA等内置变量时,无需额外声明,直接引用即可。

















