尚未创建GitLab CI Docker WORKDIR

时间:2019-09-05 20:32:06

标签: docker docker-compose gitlab-ci

我正在尝试通过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共享运行程序。我的管道看起来完全可以执行,但是最终导致此符号链接失败:

enter image description here

...我认为不必担心。如果我通过SSH进入我的盒子并转到docker compose复制并检查的地方:

enter image description here

Docker尚未创建docker-compose.yml

版本:

  • Docker: 19.03.1
  • Docker编写: 1.22.0

我的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 ...任何为什么?

1 个答案:

答案 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