如何为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条变量即可覆盖所有环境:
- 后台添加变量
ENV_DOMAIN_TPL,值设为${CI_ENVIRONMENT_NAME}.yourdomain.com,作用域选所有环境 - 单独添加1条
ENV_DOMAIN_TPL变量,作用域选prod环境,值为yourdomain.com - 在CI脚本中解析变量:
script: - export ENV_DOMAIN=$(eval echo $ENV_DOMAIN_TPL)
内容的提问来源于stack exchange,提问作者Fla
相关产品推荐
相关产品推荐

