我正在尝试通过GitLab CI将NodeJS存储库部署到DO Drop。我一直遵循this guide这样做。奇怪的是,部署管道似乎成功了,但是如果我通过SSH进入机箱,我可以看到该应用程序没有运行,因为未能在package.json
中找到{{1} 1}}我的Dockerfile指向。
/usr/src/app
WORKDIR
gitlab-ci.yml
cache:
key: "${CI_BUILD_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" ]
我正在为管道使用GitLab共享运行程序。我的管道看起来完全可以执行,但是最终导致此符号链接失败:
...我认为不必担心。如果我通过SSH进入我的盒子并转到docker compose复制并检查的地方:
Docker尚未创建docker-compose.yml
。
版本:
我的DO框是Docker 1单击btw。任何帮助表示赞赏!
编辑
我已经更改了Dockerfile以尝试强制创建目录,因此在将其声明为工作目录的行之前添加了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
。这仍然不会创建目录...
当我查看容器状态'(/usr/src/app
)时,我可以看到容器处于退出状态并且已经退出,代码为1或254 ...任何为什么?
答案 0 :(得分:1)
您的撰写文件是为开发环境设计的,在该开发环境中,代码目录被替换为开发人员计算机上代码的卷装载。您在生产中没有此持久性目录,也不应依赖生产中映像之外的代码,从而无法将其复制到映像中。
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:
- .env