我需要通过 gitlab-ci 中的 ssh 将 env 变量传递给 docker

Posted

技术标签:

【中文标题】我需要通过 gitlab-ci 中的 ssh 将 env 变量传递给 docker【英文标题】:I need to pass an env variable to docker through ssh from gitlab-ci 【发布时间】:2021-11-11 20:40:23 【问题描述】:

从我的 gitlab-ci 中,我需要将带有 spring 配置文件的环境变量传递给 docker compose。这样的变量是为我们部署的每个服务器环境定义的。

所以,在我的 gitlab-ci 中,我有这个:

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


deploy_811AC:
  <<: *deploy_template
  stage: deploy
  when: manual
  only:
    - /^feature.*$/
    - /^fix.*$/
  environment:
    name: ccvli-ecp626
    url: 10.135.XXX.XXX
  variables:
    ENV_SPRING_PROFILES: "mock"

当我运行跑步者时,我可以看到 - echo $ENV_SPRING_PROFILES 变量的值。但是,它似乎没有在 SSH 命令中被替换,因为 docker-compose 说变量 SPRING_ACTIVE_PROFILES 是空的。

这正在成为一种噩梦,所以欢迎提供任何线索。

提前致谢

【问题讨论】:

【参考方案1】:

我对gitlab ci没有太多经验,但我认为“声明”变量的方式不是“=”而是这样:

variables:
    SPRING_ACTIVE_PROFILES: $SPRING_ACTIVE_PROFILES 

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

一旦在第一个块上声明了它,你就可以开始在代码中使用它了:)

【讨论】:

您好,感谢您的回答,但不,它们是不同的东西。我声明的第一个变量是一个 gitlab 变量,它将包含一个值。第二个声明将成为我正在部署的服务器中的 unix 环境变量键,因此我需要传递给这样的变量,即我在 gitlab 变量中首先声明的值(是取决于我所在环境的动态值部署。

以上是关于我需要通过 gitlab-ci 中的 ssh 将 env 变量传递给 docker的主要内容,如果未能解决你的问题,请参考以下文章

如何利用Gitlab-ci持续部署到远程机器?

Gitlab-ci alpine图像:主机密钥验证失败

通过 CI runner 将文件推送到 gitlab-ci

构建后的测试将在 gitlab-ci 上的新环境中运行

如何将 Sonar Quality Gates 与 Gitlab-CI 集成

如何将存储库中的文件复制到用于作业的 Docker 容器中,在 gitlab-ci.yml