Запустите docker-compose на удаленном хосте из Gitlab CI, используя ssh - PullRequest
0 голосов
/ 07 декабря 2018

В моем docker-compose.yml я использую некоторые переменные .env.Вот так:

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

Документация Docker гласит, что мне нужно запустить команду docker-compose из каталога, когда файлы .env и docker-compose.yml присутствуют вместе.

Iхотите использовать 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-compose точно из папки ~ / docker_app / app для правильной загрузки переменных .env?

Я пытался использовать ssh с параметрами -T, -tt и -t, например:

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

, но безуспешно.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Для всех, кто сталкивается с тайм-аутом Gitlab Runner и SSH, это единственный поток, который помог мне понять и устранить проблему.Как прокомментировал stashco , для вашей команды cd вы должны использовать ее следующим образом:

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

Без этого &> /dev/null бегун останавливается каждыйвремя.Надеюсь, что это поможет кому-то найти тайм-ауты Gitlab Runner, как я тут и сказал: Как исправить тайм-аут сборки SSH Webpack на CI / CD (Gitlab) .

0 голосов
/ 08 декабря 2018

Я почти уверен, что … && 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 в соответствующей папке. - Это очевидно, но я не былВы не уверены, что использовали scp или rsync с учетом соответствующего комментария в вашем вопросе "move docker-compose.yml and .env…")

...