繁体   English   中英

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

[英]Run docker-compose up on remote host from Gitlab CI using ssh

在我的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..."

没有任何成功。

任何帮助将不胜感激。

我非常确定… && exec \\$SHELL && …无法工作(例如,参见exec内置的官方文档)。

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

- (…)
- 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 .env远程服务器上.env这很明显,但是我不确定您是否使用过scprsync在您的问题“中移动docker-compose.yml和.env…”中给出了相关评论)

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

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

没有这个&> /dev/null ,跑步者每次都会停滞。 希望这对搜索Gitlab Runner超时的人有所帮助,就像我在这里陷入困境一样: 如何在CI / CD(Gitlab)上修复SSH Webpack构建超时

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM