四时宝库

程序员的知识宝库

怎么解决前端编译环境不统一的问题?

前言

直接说问题,不知道大家有没有遇到过,开发本地以及公司的测试环境都没问题,但是更新到客户那边就会有问题的情况?最近,本人有幸遇到过[打脸]。

事情是这样的,有个项目比较旧,而且刚开始的周期比较紧,所以我们自己的测试环境都是由开发自己在本地build之后,上传到测试环境直接通过nginx 进行代理发布的。但是,测试完成后,客户那边要求通过他们自己环境的jenkins 走自动化构建,所以就导致开发、测试、交付环境不一致,更新过去,有些功能有问题[石化][石化][石化]。

定位问题

根据经验,判断应该是build环境不一致,在install 依赖的时候,不同的环境、node版本导致有些依赖安装失败导致的,梳理出来之后,需要处理以下几个问题:

  • 操作系统不统一的问题,不同的操作系统,node 安装依赖有些是不一样的[吐]
  • node 版本不一致的问题

经过跟甲方的运维沟通,得到的jenkins环境配置:

  • 操作系统: Ubuntu ,开发是win,测试环境是Linux
  • node 版本: 16+ ,开发是 v14.x.x的版本

经过沟通协商,运维同意安装node:v14的版本,但是操作系统不统一的问题,肯定是无解的(不可能因为你,甲方给你重装jenkins环境的操作系统[黑线])。

呐,可能有的同学已经想到了,用docker去解决啊[狗头],没错就是用docker去解决,经过沟通,docker的情况如下:

  • jenkins 有docker环境
  • 部署服务器没docker环境(也别想着让甲方装[呆无辜]),所以不能按常规的跑docker镜像

思考中[灵光一闪][灵光一闪][灵光一闪].......

解决问题

经过问题梳理确定了通过docker去解决的方案,那就需要梳理,docker 需要处理哪些问题?

  • 统一node版本,v14.21.3
  • 在容器内容进行项目的编译打包,npm install、npm run build
  • 将容器中编译好的dist导出到宿主机并进行压缩(jenkins)
  • 将dist.tar.gz 上传到目标服务器进行发布(jenkins)

解决以上问题,就可以解决编译环境不统一、部署服务器没有docker环境的问题,上代码:

Dockerfile:

# 统一编译环境
FROM node:14.21.3-alpine3.17
WORKDIR /app 
COPY ./ .

RUN rm -rf node_modules
RUN npm cache clean -f
RUN npm install --registry https://registry.npmmirror.com 

RUN npm run build

jenkins 构建脚本:

# 构建镜像
docker build -t qxjt_medium:v1.0.0 . 
# 启动容器
docker run --name qxjt_medium -d qxjt_medium:v1.0.0 
# 将容器中构建好的dist cp 到宿主机的相应目录
docker cp qxjt_medium:/app/dist /Users/username/developer/docker/data
# 删除容器
docker rm qxjt_medium
# 删除镜像
docker rmi qxjt_medium:v1.0.0
# 压缩dist 目录
cd /Users/username/developer/docker/data
tar -zcvf dist.tar.gz dist

经过这一波操作之后,更新过去,所有功能都正常了。

结语

无论是开发问题还是需求分解,总结一条处理流程就是:

发现问题(需求分析) --> 问题解决方案(开发方案) --> 问题处理(方案落地实施)。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接