Docker 使用 Gitlab CI 为 Vue JS 构建一致性
Posted
技术标签:
【中文标题】Docker 使用 Gitlab CI 为 Vue JS 构建一致性【英文标题】:Docker build inconsistency for VueJS with GitlabCI 【发布时间】:2020-07-17 01:13:41 【问题描述】:使用 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 映像时。任何帮助表示赞赏。
【问题讨论】:
这行 docker build:RUN NODE_ENV=$NODE_ENV npm run build
是否失败?
【参考方案1】:
当环境变量 NODE_ENV
设置为 production
运行时,npm 不会安装列为“devDependencies”的软件包。引用自official documentation:
使用 --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
标志)。
【讨论】:
以上是关于Docker 使用 Gitlab CI 为 Vue JS 构建一致性的主要内容,如果未能解决你的问题,请参考以下文章
Gitlab CI/CD 之 Gitlab Runner Docker Executor 缓存问题
以 shell 执行器和 docker 镜像为基础的 Gitlab CI
如何使用 CI/CD 为 Gitlab 注册表推送基于 docker compose 的图像
无法在 Windows 服务器上使用 docker 为 gitlab-ci 运行构建