使用ssh从Gitlab CI运行docker-compose在远程主机上

时间:2018-12-07 14:57:30

标签: docker docker-compose continuous-integration gitlab alpine

在我的docker-compose.yml文件中,我使用了一些.env变量。就是这样:

services:
  ms:
    image: 'template:latest'
    build:
      context: .
    restart: always
    ports:
      - '${PORT}:${PORT}'
    env_file:
      - .env

Docker文档说,当.env和docker-compose.yml文件同时存在时,我必须从目录运行docker-compose up命令。

我想使用GitLab CI自动部署mi服务。这是gitlab-ci-yml文件的一部分:

image: docker:latest

services:
  - docker:dind

...

run-deploy-prod:
  stage: deploy
  cache: {}
  before_script:
  # ssh configuration for alpine linux
  script:
    # move docker-compose.yml and .env to the location ~/docker_app/app
    - ssh $USER_NAME@$HOST_ADDRESS 'docker-compose -f '~/docker_app/app/docker-compose.yml' up --no-build -d'

问题: 如何才能从〜/ docker_app / app位置准确运行docker-compose以正确加载.env变量?

我尝试将ssh与-T,-tt和-t选项一起使用,例如:

ssh -T bob@foo "cd ~/docker_app/app && exec \$SHELL && docker-compose up..."

没有成功。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我很确定… && exec \$SHELL && …无法正常工作(例如,参见exec builtin上的官方文档)。

但是,在固定引号之后,您的首次尝试似乎应该可以:您可以尝试以下操作吗?

- (…)
- ssh $USER_NAME@$HOST_ADDRESS "docker-compose -f ~/docker_app/app/docker-compose.yml up --no-build -d"

或等效地:

- (…)
- ssh $USER_NAME@$HOST_ADDRESS "cd ~/docker_app/app/ && docker-compose up --no-build -d"

否则,您可以粘贴获得的错误日志吗?

(此外,您还应确保已将docker-compose.yml.env文件复制到相应文件夹中$HOST_ADDRESS上的远程服务器。-这很明显,但是我不确定您在问题“ move docker-compose.yml和.env…”中的相关评论中使用过scprsync

答案 1 :(得分:0)

对于遇到Gitlab Runner和SSH超时的任何人,这是唯一帮助我意识到并解决问题的线程。正如stashco所评论的那样,对于您的cd命令,您必须像这样使用它:

cd /path/to/docker-compose &> /dev/null

没有此&> /dev/null,跑步者每次都会停滞。希望这可以帮助某人搜索Gitlab Runner超时,就像我在这里陷入困境一样:How to fix SSH Webpack build timeout on CI/CD (Gitlab)

相关问题