【发布时间】:2018-12-08 04:42:07
【问题描述】:
我正在尝试使用来自 gitlab 的 docker 使用它的 ci 部署我的应用程序。我已将 gitlab-ci 配置如下(它已简化,docker build 和 push to registy 是在eariel 步骤中完成的,但为了便于阅读,我将跳过它)
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 并登录到注册表。
作为开发服务器,我有一个来自 DigitalOcean 的一键式 docker droplet,它是否可能无法处理此流量?也许我应该等一下,直到调用下一个 ssh 命令?我完全迷失了,因为这是一个非常基本的配置,我找不到任何其他配置,所以我会非常感谢任何提示,谢谢!
【问题讨论】:
-
是的,在将所有命令合并到一个只需要一个 ssh 连接的组合之后,它就开始工作了。但为什么?是不是可以建立多个ssh连接,每次只调用一个command?