每次把代码推到 gitlab ,jerkins 都会自动打包,但是每次都要执行 npm install ,总是反反复复的出问题,大佬们都是怎么解决这个问题的,这块的 shell 是怎么写的呢?
|  |      1xingyuc      2022-10-28 09:34:32 +08:00 rm -rf node_modules | 
|      2zhixiao      2022-10-28 09:35:11 +08:00 是不是网络问题?配置使用淘宝的源吧 | 
|  |      3chairuosen      2022-10-28 09:36:17 +08:00 jenkins 不是有固定的 workspace ,每次执行完不删的,第二次 install 没变化就很快。用 docker 的才有你这个问题 | 
|  |      4okrfuse OP @xingyuc 这一步会执行,我没有说清楚,我觉得如果 package.json 不变的话,没有必要 install ,还有国内网络问题导致 install 出错,就是不知道该怎么写,纯小白,莫怪 | 
|      5KickAssTonight      2022-10-28 09:37:12 +08:00 jerkins? jenkins? | 
|  |      6cydysm      2022-10-28 09:37:33 +08:00 via iPhone pkg.json 和 lock file 锁死版本 最好用 prefer online 模式 加上一楼的 rm -rf node_modules 可以试试 | 
|  |      7okrfuse OP @chairuosen 确实是 docker ,不管有没有变化,只要提交就就会 install ,很烦人 | 
|  |      8okrfuse OP @KickAssTonight 抱歉拼写错误了,大佬是怎么处理这块的呢 | 
|  |      9GentleFifth      2022-10-28 09:40:25 +08:00 via Android @okrfuse docker 有缓存的,可以先把 package.json 拷贝进去安装依赖,再把业务代码拷进去编译,这样只要依赖没有变化 docker 就会复用之前的构建缓存 | 
|      10passon      2022-10-28 09:41:26 +08:00 换成 pnpm 能加快些速度 | 
|  |      11chairuosen      2022-10-28 09:43:41 +08:00 @okrfuse #7 内网搭一个私有源加速 | 
|  |      13dier      2022-10-28 09:57:58 +08:00 用分支来控制一下吧,如果只想保存代码不想打包,可以先提交到一个开发分支,等代码完成了再合并到主分支,jenkins 上配置只对主分支进行 install | 
|      14yikyo      2022-10-28 10:02:54 +08:00 第一,必须锁版本,源代码提供 lock 文件 第二,上缓存,docker 、jenkins 应该都提供类似的功能,自己找点资料,节省编译时间。 | 
|  |      15Musong      2022-10-28 10:14:11 +08:00 npm install xxx --registry=https://mirrors.cloud.tencent.com/npm/ | 
|      16chenzi0103      2022-10-28 10:17:59 +08:00 docker 提前把相关的包和环境装好 | 
|  |      17qwertty01      2022-10-28 10:21:10 +08:00 大概率是 docker 缓存没有整好,有缓存的话就算 install 也很快的。而且不 install 的话,一旦 package 有变动就要调整编译打包流程了。 一个建议打包过程别用 docker ,直接使用 jenkins 原生打包就行。当然还有 v 友说的上 lock 之类的。 因为如果熟悉 docker 肯定会把缓存这块给搞好的,但既然搞不好,就说明 docker 不熟悉,还是别用 docker 了。 | 
|  |      18yaphets666      2022-10-28 10:31:50 +08:00 肯定是不每次都执行 install 没必要。 更新 20 次不见得有 1 次新增了包。在 jenkins 的命令里把 install 注释掉 需要再打开 | 
|      19wu00      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 ``` | 
|  |      20seekmyduck      2022-10-28 11:13:15 +08:00 看到 jerkins 就想到 jerk off 打个胶先? | 
|      21x3byg9oyv27Wlx      2022-10-28 11:18:33 +08:00 Jenkins 步骤写脚本,用 git diff 或其他方法,判断 package.json 是否有更改,若无更改,跳过 install 步骤 | 
|      22brader      2022-10-28 11:21:03 +08:00 安装包挺烦的,我们受够了,最后就直接在本地安装了,安装完把包目录压缩,Jenkins 部署过程就是直接解压出来用 | 
|  |      23967182      2022-10-28 13:26:45 +08:00 判断如果有 node_modules 目录就不执行了啊 stage('编译'){ steps { echo "开始 install" script { if(!fileExists('node_modules')) { sh "npm install --registry=https://registry.npm.taobao.org" } else { echo "node_modules 已存在不执行 npm install" } } } } | 
|  |      24vishun      2022-10-28 14:43:24 +08:00 1 、首先需要版本控制上要有 lock 文件。 2 、然后用`npm ci`命令 | 
|  |      25kongkx      2022-10-28 14:55:56 +08:00 via iPhone gitlab-ci.yml 上可以设置缓存策略。  1. 一般通过 package-lock.json 来判断是否需要更新缓存。 2. 执行 npm ci --cache <custom _dir> 来安装依赖,并且缓存整个 custom_dir 3. 再细点还可以分 npm 缓存 跟 构建缓存 我用的是用 gitlab ci runner + docker 来跑,jenkins 不知道有什么区别 |