【问题标题】:GitLab SSH to server to run docker stack deploy, getting no file foundGitLab SSH 到服务器运行 docker stack deploy,找不到文件
【发布时间】:2019-09-28 02:00:40
【问题描述】:

我有一个使用 GitLab 设置的 CI/CD 管道,它运行良好,除了最终部署阶段。当在我的部署服务器中获取 shell 并尝试运行“docker stack deploy -c deploy-stack.yml reactclient”时,我收到 deploy-stack.yml 的“未找到文件”,这会导致部署失败。

在运行此命令之前,我正在运行“ls”,它会打印出容器内的文件列表,其中之一是 deploy-stack.yml。但是,在运行下一个命令时,找不到 deploy-stack.yml?!

这是我的 .gitlab-ci.yml 中失败的部署阶段:

deploy:
  stage: deploy
  services:
    - docker:dind
  tags:
    - runner
  only:
    - master
  when: manual
  environment:
    name: production
    url: https://app.mydeployserver.com
  before_script:
    - mkdir -p ~/.ssh
    - echo "$DEPLOY_SERVER_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    - eval "$(ssh-agent -s)"
    - ssh-add ~/.ssh/id_rsa
    - ssh-keyscan -H $DEPLOYMENT_SERVER_IP >> ~/.ssh/known_hosts
  script:
    - echo "Start deploy to production server"
    - ssh root@$DEPLOYMENT_SERVER_IP "
        echo $DEPLOYMENT_SERVER_IP;
        echo $CI_JOB_TOKEN | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY;
        docker pull $IMAGE_TAG;
        echo "Where am I? - $PWD";
        echo "What files are in here? - $(ls)";
        docker stack deploy -c deploy-stack.yml reactclient"
    - echo "End deploy to production server"

正如您在 docker stacker deploy 之前看到的那样,我正在运行 echo "What files are in here? - $(ls),它会打印出 deploy-stack.yml

但由于“未找到文件”而导致作业失败,这是 GitLab 的输出:

Status: Downloaded newer image for registry.gitlab.com/myusername/myimage:latest
Where am I? - /builds/myusername/myimage
What files are in here? - Dockerfile __mocks__ appspec.yml build config deploy-stack.yml jest.config.js local.Dockerfile nginx package-lock.json package.json scripts server src webpack.dev.js webpack.prod.config.js webpack.prod.js
open deploy-stack.yml: no such file or directory
ERROR: Job failed: exit code 1

我哪里出错了?这与其他一些 docker 守护进程正在运行的命令有关吗?这让 gitlab + docker vs dind + ssh 到另一台服务器真的很混乱。

任何指针都非常感谢。

【问题讨论】:

  • 奇怪的问题,你试过放绝对路径吗?

标签: docker ssh gitlab docker-swarm continuous-deployment


【解决方案1】:

查看这部分代码:

    - ssh root@$DEPLOYMENT_SERVER_IP "
        echo $DEPLOYMENT_SERVER_IP;
        echo $CI_JOB_TOKEN | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY;
        docker pull $IMAGE_TAG;
        echo "Where am I? - $PWD";
        echo "What files are in here? - $(ls)";
        docker stack deploy -c deploy-stack.yml reactclient"

您打开引号- ssh root@$DEPLOYMENT_SERVER_IP " 并在行上关闭它们echo "Where am I? - $PWD";

您可以尝试以下方法:

    - ssh root@$DEPLOYMENT_SERVER_IP "
        echo $DEPLOYMENT_SERVER_IP;
        echo $CI_JOB_TOKEN | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY;
        docker pull $IMAGE_TAG;
        echo Where am I? - $PWD;
        echo What files are in here? - $(ls);
        docker stack deploy -c deploy-stack.yml reactclient"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多