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
相关产品推荐
相关产品推荐

