首页 > 解决方案 > Docker 为 VueJS 与 GitlabCI 构建不一致

问题描述

使用 Gitlab CI,我正在尝试为 VueJS 应用程序构建 docker 图像。.gitlab-ci.yml文件如下:

image: docker
services:
  - docker:dind
stages: 
  - staging
  - deploy

staging:
  stage: staging
  tags: [staging]
  script:
    - docker build --build-arg env=staging -t npmmc/router-control .
    - docker stop router-control || true && docker rm router-control || true
    - docker run -d -p 4001:8080 --restart unless-stopped --env NODE_ENV=staging --name router-control npmmc/router-control

deploy:
  stage: deploy
  tags: [production]
  when: manual
  only: 
    - master
  script:
    - docker build --build-arg env=production -t npmmc/router-control .
    - docker stop router-control || true && docker rm router-control || true
    - docker run -d -p 4001:8080 --restart unless-stopped --env NODE_ENV=production --name router-control npmmc/router-control

并且Dockerfile

FROM node:lts-alpine

ARG env=development
ENV NODE_ENV=${env}

RUN npm install -g http-server
WORKDIR /app
COPY package*.json ./
RUN npm install --progress=false
COPY . .
RUN NODE_ENV=${NODE_ENV} npm run build

EXPOSE 8080
CMD ["http-server", "dist"]

staging步骤构建并运行没有任何问题。该production步骤因错误而失败sh: vue-cli-service: not found。我不明白它们之间有什么不同,当我在测试后第二次为生产构建完全相同的 docker 映像时。任何帮助表示赞赏。

标签: dockervue.jsgitlabgitlab-civue-cli

解决方案


NODE_ENV当使用设置为npm的环境变量运行时,production 将不会安装列为“devDependencies”的包。引用官方文档

使用 --production 标志(或者当 NODE_ENV 环境变量设置为生产时),npm 将不会安装 devDependencies 中列出的模块。要在 NODE_ENV 环境变量设置为生产时安装依赖项和 devDependencies 中列出的所有模块,可以使用 --production=false。

因此,您的问题的解决方案是:

  • ENV NODE_ENV=${env}行向下移动一点,所以它在行之后RUN npm install --progress=false
  • 替换RUN npm install --progress=falseRUN npm install --progress=false --production=false(添加的--production=false标志)。

推荐阅读