docker - 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 映像时。任何帮助表示赞赏。
解决方案
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=false
为RUN npm install --progress=false --production=false
(添加的--production=false
标志)。
推荐阅读
- azure - Azure 逻辑应用服务总线发送消息连接器返回 504 网关超时错误
- powerbi - PowerBI - 计算具有值的行数作为表用户
- typescript - 我在 typeorm 中对数组进行过滤时遇到问题。QueryBuilder 只返回它找到的第一个匹配项
- vue.js - Vue Accordion:覆盖 SCSS 值
- neo4j - Neo4j 计算关系
- view - 从多个列标题创建切片器
- flutter - 连接服务协议出错:无法连接到http://127.0.0.1:58463/vWu5Xiui7n4=/
- java - Java代码显示到下一个闰年的年数
- python - 用新的数据框更新数据框,覆盖
- button - 如何根据页面语言更改按钮位置?