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

GitLab CI通过SSH执行远程Docker Compose时如何传递环境变量

问题根因
  • 你当前在SSH远程命令中定义的SPRING_ACTIVE_PROFILES仅为远程shell的临时变量,没有导出为环境变量,作为子进程的docker-compose无法读取到该变量。
  • 变量解析顺序不符合预期:如果SSH命令的引号逻辑处理不当,会导致$ENV_SPRING_PROFILES没有在GitLab Runner本地完成替换,就被发送到远端服务器执行,而远端服务器不存在该变量,自然取值为空。
解决方案

方案1:将变量直接附加到docker-compose命令前(最稳妥)

直接把环境变量写在docker-compose命令前缀,无需额外export,变量会直接传入该命令的执行上下文:

.deploy_template: &deploy_template
  script:
    - echo $ENV_SPRING_PROFILES
    # start containers
    - $SSH_COMMAND user@$CI_ENVIRONMENT_URL "cd $REMOTE_DEPLOY_DIR/docker && DOCKER_HOST=tcp://localhost:2375 SPRING_ACTIVE_PROFILES=$ENV_SPRING_PROFILES docker-compose up -d"

方案2:显式export环境变量

如果需要在多个命令中复用该变量,可以显式export为远程shell的环境变量:

.deploy_template: &deploy_template
  script:
    - echo $ENV_SPRING_PROFILES
    # start containers
    - $SSH_COMMAND user@$CI_ENVIRONMENT_URL "cd $REMOTE_DEPLOY_DIR/docker && export SPRING_ACTIVE_PROFILES=$ENV_SPRING_PROFILES && export DOCKER_HOST=tcp://localhost:2375 && docker-compose up -d"
验证方法

如果修改后仍有问题,可以在远程命令中新增打印逻辑,确认远端实际收到的变量值:

- $SSH_COMMAND user@$CI_ENVIRONMENT_URL "echo 远端接收变量值: $ENV_SPRING_PROFILES && cd $REMOTE_DEPLOY_DIR/docker && SPRING_ACTIVE_PROFILES=$ENV_SPRING_PROFILES DOCKER_HOST=tcp://localhost:2375 docker-compose up -d"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:30:01