我正在尝试通过NodeJS CI将我的GitLab回购部署到一个DO液滴上。我一直在跟踪本指南这样做。奇怪的是,部署管道似乎成功了,但是如果我将SSH放入到这个框中,我可以看到应用程序没有运行,因为在/usr/src/app中找不到一个/usr/src/app中的WORKDIR,这是Dockerfile所指向的WORKDIR。
gitlab-ci.yml
cache:
key: "${CI_COMMIT_REF_NAME} node:latest"
paths:
- node_modules/
- .yarn
stages:
- build
- release
- deploy
build:
stage: build
image: node:latest
script:
- yarn
artifacts:
paths:
- node_modules/
release:
stage: release
image: docker:latest
only:
- master
services:
- docker:dind
variables:
DOCKER_DRIVER: "overlay"
before_script:
- docker version
- docker info
- docker login -u ${CI_REGISTRY_USER} -p ${CI_BUILD_TOKEN} ${CI_REGISTRY}
script:
- docker build -t ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest --pull .
- docker push ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest
after_script:
- docker logout ${CI_REGISTRY}
deploy:
stage: deploy
image: gitlab/dind:latest
only:
- master
environment: production
when: manual
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:
- printf "DB_URL=${DB_URL}\nDB_NAME=${DB_NAME}\nPORT=3000" > .env
- scp -r ./.env ./docker-compose.yml root@${DEPLOYMENT_SERVER_IP}:~/
- ssh root@${DEPLOYMENT_SERVER_IP} "docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}; docker-compose rm -sf scraper; docker pull ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest; docker-compose up -d"Dockerfile
FROM node:10
WORKDIR /usr/src/app
COPY package.json ./
RUN yarn
COPY . .
EXPOSE 3000
CMD [ "yarn", "start" ]docker-compose.yml
version: "3"
services:
scraper:
build: .
image: registry.gitlab.com/arby-better/scraper:latest
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
ports:
- 3000:3000
environment:
- NODE_ENV=production
env_file:
- .env我在管道中使用GitLab共享运行程序。我的管道看起来执行得很好,但是对于这个符号链接失败,在最后:

...which,我觉得没什么好担心的。如果我将SSH放入我的盒子中,然后去复制和检查对接者撰写的内容:

Docker尚未创建/usr/src/app。
版本:
我的DO框是Docker 1-单击btw。任何帮助都很感激!
编辑
我修改了我的Dockerfile,试图强制dir创建,因此在声明它为工作dir的行之前添加了RUN mkdir -p /usr/src/app。这仍然不能创建目录..。
当我查看容器状态‘(docker-compose ps),’时,我可以看到容器处于退出状态&是否使用了代码1或254...any来退出?
发布于 2019-09-06 10:37:56
您的撰写文件是为开发环境设计的,在开发环境中,代码目录将被安装到开发人员机器上的代码的卷挂载所取代。您在生产中没有这个持久目录,也不应该依赖于生产中映像之外的代码,从而使复制到映像中的目的落空。
version: "3"
services:
scraper:
build: .
image: registry.gitlab.com/arby-better/scraper:latest
# Comment out or delete these lines, they do not belong in production
#volumes:
# - .:/usr/src/app
# - /usr/src/app/node_modules
ports:
- 3000:3000
environment:
- NODE_ENV=production
env_file:
- .envhttps://stackoverflow.com/questions/57812615
复制相似问题