Я пытаюсь развернуть свое приложение с помощью докера из gitlab, используя его ci.Я настроил gitlab-ci следующим образом (он упрощен, сборка докера и передача в регистр выполняется на более ранних этапах, но для удобства чтения я пропущу его)
image: docker:stable
services:
- postgres:latest
- docker:dind
stages:
- test
- build
- deploy
variables:
DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2
run_develop_container:
stage: deploy
image: kroniak/ssh-client
before_script:
- which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
- ssh-keyscan -H $DEVELOP_SERVER >> ~/.ssh/known_hosts
- chmod 700 ~/.ssh
script:
- scp docker-compose-develop.yml $SSH_DEPLOY_USER@$DEVELOP_SERVER:~/docker-compose.yml
- ssh -o StrictHostKeyChecking=no $SSH_DEPLOY_USER@$DEVELOP_SERVER "docker login -u $DOCKER_USER_ID -p $DOCKER_USER_PASSWORD"
- ssh -o StrictHostKeyChecking=no $SSH_DEPLOY_USER@$DEVELOP_SERVER "docker-compose -p app-name down --remove-orphans"
- ssh -o StrictHostKeyChecking=no $SSH_DEPLOY_USER@$DEVELOP_SERVER "docker-compose -p app-name pull && docker-compose -p app-name up -d"
only:
- setup_deploy_process
И вывод из конвейера выглядит следующим образом
... some common things ...
$ which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )
/usr/bin/ssh-agent
$ eval $(ssh-agent -s)
Agent pid 12
$ echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
Identity added: (stdin) ((stdin))
$ mkdir -p ~/.ssh
$ [[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
$ ssh-keyscan -H $DEVELOP_SERVER >> ~/.ssh/known_hosts
# some_data_with_develop_server_ip
$ chmod 700 ~/.ssh
$ scp docker-compose-develop.yml $SSH_DEPLOY_USER@$DEVELOP_SERVER:~/docker-compose.yml
$ ssh -o StrictHostKeyChecking=no $SSH_DEPLOY_USER@$DEVELOP_SERVER "docker login -u $DOCKER_USER_ID -p $DOCKER_USER_PASSWORD"
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
WARNING! Your password will be stored unencrypted in /home/runner/.docker/config.json.
Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store
$ ssh -o StrictHostKeyChecking=no $SSH_DEPLOY_USER@$DEVELOP_SERVER "docker-compose -p app-name down --remove-orphans"
ssh: connect to host 159.89.24.62 port 22: Connection refused
ERROR: Job failed: exit code 1
Теперь мне кажется, что ssh настроен правильно, так как скрипт может подключаться к scp docker-compose и входить в реестр.
При разработке сервера у меня один щелчокDocker droplet от DigitalOcean, возможно ли, что он не справится с этим трафиком?Может быть, мне стоит подождать, пока не будет вызвана следующая команда ssh?Я полностью потерян, так как это довольно простая конфигурация, и я не могу найти другую, поэтому я буду очень благодарен за любую подсказку, спасибо!