You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为GitLab CI变量根据不同环境设置多个对应值

GitLab CI 多环境域名变量统一配置方案

你可以通过以下两种更易维护的方式实现多环境下ENV_DOMAIN的自动匹配,不需要在后台重复创建5次同名变量:

方案1:CI配置文件内置映射(最推荐)

所有域名规则直接写在.gitlab-ci.yml中,支持版本管理,无需后台操作:

  • 无额外依赖方案(shell原生case实现)
# 部署任务通用模板
.deploy_template:
  script:
    # 根据当前环境名自动匹配对应域名
    - |
      case "$CI_ENVIRONMENT_NAME" in
        dev) export ENV_DOMAIN="dev.yourdomain.com" ;;
        test) export ENV_DOMAIN="test.yourdomain.com" ;;
        staging) export ENV_DOMAIN="staging.yourdomain.com" ;;
        pre) export ENV_DOMAIN="pre.yourdomain.com" ;;
        prod) export ENV_DOMAIN="yourdomain.com" ;;
      esac
    # 后续业务逻辑可直接使用$ENV_DOMAIN
    - echo "当前环境域名为 $ENV_DOMAIN"

# 开发环境部署任务示例
deploy_dev:
  extends: .deploy_template
  environment:
    name: dev
  only:
    - dev
  • 如果你运行器镜像带有jq工具,也可以用JSON映射的方式更清晰:
variables:
  # 统一维护所有环境的域名映射
  DOMAIN_MAP: |
    {
      "dev": "dev.yourdomain.com",
      "test": "test.yourdomain.com",
      "staging": "staging.yourdomain.com",
      "pre": "pre.yourdomain.com",
      "prod": "yourdomain.com"
    }

.deploy_template:
  script:
    - export ENV_DOMAIN=$(echo "$DOMAIN_MAP" | jq -r ".[\"$CI_ENVIRONMENT_NAME\"]")

如果你的环境名和域名前缀完全对应,还可以简化为直接拼接:

.deploy_template:
  script:
    - export ENV_DOMAIN="${CI_ENVIRONMENT_NAME}.yourdomain.com"
    # 生产环境单独处理无前缀的情况
    - if [ "$CI_ENVIRONMENT_NAME" == "prod" ]; then export ENV_DOMAIN="yourdomain.com"; fi

方案2:域名规则和代码解耦

如果域名需要经常修改、不想随代码变更,可以在GitLab后台仅创建2条变量即可覆盖所有环境:

  1. 后台添加变量ENV_DOMAIN_TPL,值设为${CI_ENVIRONMENT_NAME}.yourdomain.com,作用域选所有环境
  2. 单独添加1条ENV_DOMAIN_TPL变量,作用域选prod环境,值为yourdomain.com
  3. 在CI脚本中解析变量:
script:
  - export ENV_DOMAIN=$(eval echo $ENV_DOMAIN_TPL)

内容的提问来源于stack exchange,提问作者Fla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:57:00