从GitLab-CI部署Docker容器到Digital Ocean Droplet

14

这是我想要做的:

  1. 在git中推送到master分支
  2. 让gitlab-ci监听该推送并启动流水线
  3. 流水线构建代码并将docker容器推送到gitlab registry
  4. 流水线通过ssh登录到数字海洋(Digital Ocean)droplet中
  5. 流水线从gitlab registry中拉取docker容器
  6. 流水线启动容器

我可以轻松地完成前四步,但第四步总是失败。我尝试过使用ssh密钥的方法:

但那并没有起作用。

所以我尝试了明文密码的方法,就像这样:

image: gitlab/dind:latest

before_script:
 - apt-get update -y && apt-get install sshpass

stages:
 - deploy

deploy:
  stage: deploy
  script:
    - sshpass -p "mypassword" ssh root@x.x.x.x 'echo $HOME'

这个版本的退出码是1

由于标准输入不是终端,因此不会分配伪终端。

ln: failed to create symbolic link '/sys/fs/cgroup/systemd/name=systemd': Operation not permitted
/usr/local/bin/wrapdocker: line 113:    54 Killed                  docker daemon $DOCKER_DAEMON_ARGS &> /var/log/docker.log
Timed out trying to connect to internal docker host. 

有更好的方法吗?我至少如何从gitlab-ci构建环境内访问我的droplet?


你成功地找到了解决方法或者解决了这个问题吗? - Renato Oliveira
1个回答

2
最初的回答:
我刚刚回答了这个相关问题:Create react app + Gitlab CI + Digital Ocean droplet - Pipeline succeeds but Docker container is deleted right after 以下是他正在使用的解决方案以设置ssh凭据:
before_script:
  ## Install ssh agent (so we can access the Digital Ocean Droplet) and run it.
  - apk update && apk add openssh-client
  - eval $(ssh-agent -s)

  ## Write the environment variable value to the agent store, create the ssh directory and give the right permissions to it.
  - echo "$SECRETS_DIGITAL_OCEAN_DROPLET_SSH_KEY" | ssh-add -
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh

  ## Make sure that ssh will trust the new host, instead of asking
  - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config

  ## Test it!
  - ssh -t ${SECRETS_DIGITAL_OCEAN_DROPLET_USER}@${SECRETS_DIGITAL_OCEAN_DROPLET_IP} 'echo $HOME'

代码的原始回答来自https://stackoverflow.com/users/6655011/leonardo-sarmento-de-castro


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接