【发布时间】: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