前端代码 jerkins 自动打包部署的小白问题

2022-10-28 09:30:22 +08:00
 okrfuse

每次把代码推到 gitlab ,jerkins 都会自动打包,但是每次都要执行 npm install ,总是反反复复的出问题,大佬们都是怎么解决这个问题的,这块的 shell 是怎么写的呢?

2826 次点击
所在节点    程序员
25 条回复
xingyuc
2022-10-28 09:34:32 +08:00
rm -rf node_modules
zhixiao
2022-10-28 09:35:11 +08:00
是不是网络问题?配置使用淘宝的源吧
chairuosen
2022-10-28 09:36:17 +08:00
jenkins 不是有固定的 workspace ,每次执行完不删的,第二次 install 没变化就很快。用 docker 的才有你这个问题
okrfuse
2022-10-28 09:36:34 +08:00
@xingyuc 这一步会执行,我没有说清楚,我觉得如果 package.json 不变的话,没有必要 install ,还有国内网络问题导致 install 出错,就是不知道该怎么写,纯小白,莫怪
KickAssTonight
2022-10-28 09:37:12 +08:00
jerkins? jenkins?
cydysm
2022-10-28 09:37:33 +08:00
pkg.json 和 lock file 锁死版本 最好用 prefer online 模式 加上一楼的 rm -rf node_modules 可以试试
okrfuse
2022-10-28 09:38:03 +08:00
@chairuosen 确实是 docker ,不管有没有变化,只要提交就就会 install ,很烦人
okrfuse
2022-10-28 09:38:53 +08:00
@KickAssTonight 抱歉拼写错误了,大佬是怎么处理这块的呢
GentleFifth
2022-10-28 09:40:25 +08:00
@okrfuse docker 有缓存的,可以先把 package.json 拷贝进去安装依赖,再把业务代码拷进去编译,这样只要依赖没有变化 docker 就会复用之前的构建缓存
passon
2022-10-28 09:41:26 +08:00
换成 pnpm 能加快些速度
chairuosen
2022-10-28 09:43:41 +08:00
@okrfuse #7 内网搭一个私有源加速
wu00
2022-10-28 09:43:52 +08:00
@okrfuse 挂载宿主机目录作为 node_modules 缓存,每次 install 没问题,问题在于不能每次从远端拉包
dier
2022-10-28 09:57:58 +08:00
用分支来控制一下吧,如果只想保存代码不想打包,可以先提交到一个开发分支,等代码完成了再合并到主分支,jenkins 上配置只对主分支进行 install
yikyo
2022-10-28 10:02:54 +08:00
第一,必须锁版本,源代码提供 lock 文件
第二,上缓存,docker 、jenkins 应该都提供类似的功能,自己找点资料,节省编译时间。
Musong
2022-10-28 10:14:11 +08:00
npm install xxx --registry=https://mirrors.cloud.tencent.com/npm/
chenzi0103
2022-10-28 10:17:59 +08:00
docker 提前把相关的包和环境装好
qwertty01
2022-10-28 10:21:10 +08:00
大概率是 docker 缓存没有整好,有缓存的话就算 install 也很快的。而且不 install 的话,一旦 package 有变动就要调整编译打包流程了。
一个建议打包过程别用 docker ,直接使用 jenkins 原生打包就行。当然还有 v 友说的上 lock 之类的。
因为如果熟悉 docker 肯定会把缓存这块给搞好的,但既然搞不好,就说明 docker 不熟悉,还是别用 docker 了。
yaphets666
2022-10-28 10:31:50 +08:00
肯定是不每次都执行 install 没必要。 更新 20 次不见得有 1 次新增了包。在 jenkins 的命令里把 install 注释掉 需要再打开
wu00
2022-10-28 10:56:17 +08:00
install 很慢之前也折腾过一阵子
docker 的 layer cache 也是不错的选项,但是删除了镜像或者做了 prune 就没有了
最后选择模拟本地打包,核心就是挂载 node_modules 文件夹,临时容器进行打包便于隔离环境
gitlab-ci 供参考
```yaml
stages:
- pack

pack-dev:
stage: pack
tags:
- global
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
when: on_success
script:
- docker run --rm -v $PWD:/tmp/app -v /mnt/build-cache/$IMAGE_NAME/node_modules:/tmp/app/node_modules node:16-alpine /bin/sh -c "cd /tmp/app/; npm install --registry=https://registry.npm.taobao.org; npm run build"
- docker build -t $REGISTRY/$IMAGE_NAME:$IMAGE_TAG .
- docker push $REGISTRY/$IMAGE_NAME:$IMAGE_TAG
```
seekmyduck
2022-10-28 11:13:15 +08:00
看到 jerkins 就想到 jerk off
打个胶先?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/890580

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX