docker - 在gitlab作业中使用SSH重新启动docker-container

标签 docker ssh gitlab

我正在尝试为使用node和mongodb构建的 typescript API添加一些连续部署。

我想通过已经拥有的gitlab实例来这样做:

亚军配置(/etc/gitlab-runner/config.toml):

[[runners]]
  name = "runner"
  url = "https://git.[DOMAIN].[EXT]"
  token = "[ID]"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "mhart/alpine-node:6.5"
    privileged = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
  [runners.cache]

所以我的部署工作如下:
Deployment_preprod:
  stage: Deploy
  before_script:
    # https://docs.gitlab.com/ee/ci/ssh_keys/
    - 'which ssh-agent || ( apk add --no-cache --virtual openssh-client )'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
    - mkdir -p ~/.ssh
    - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
    - chmod 700 ~/.ssh
  script:
    - scp -r dist  user@[IP]:/home/[user]/preprod-back
    - ssh -tt user@[IP] cd /home/[user]/preprod-back && yarn run doc && docker-compose restart
  environment:
    name: preprod
    url: https://preprod.api.[DOMAIN].[EXT]
  only:
    - develop

问题:
这项工作在/bin/sh: eval: line 91: docker-compose: not found上失败,这使我感到惊讶,因为当我通过ssh登录服务器时,运行docker-compose [whatever]只能在服务器端正常工作。

最佳答案

&&使您绊倒。您应该引用整个远程命令。

script:
  - scp -r dist  user@[IP]:/home/[user]/preprod-back
  - ssh -tt user@[IP] "cd /home/[user]/preprod-back && yarn run doc && docker-compose restart"

关于docker - 在gitlab作业中使用SSH重新启动docker-container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52393217/

相关文章:

git - 在 GitLab 中设置 PuTTY 创建的 SSH key

Gitlab 工件和未跟踪

docker - docker/微服务中的 RabbitMQ 监听器

docker - 如何在使用 docker-compose 并行运行 docker 容器时限制 cpu 使用率

apache - 如何访问Apache2容器工作目录以更改默认html的内容?

java - 我们如何在 Android 上创建 ssh 连接?

docker - 在 Dockerfile 中使用 ENTRYPOINT 会使基础镜像的 CMD 被忽略

ubuntu - 使用 X11 SSH 到 NetBSD 8.2 guest 提供 "X11 forwarding request failed on channel 0"

windows - 在 Windows 中查找 USB 以太网链路本地 IP 地址

java - 使用 Gitlab CI 将 Spring Boot 应用程序部署到 Google App Engine?