V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kenshin912
V2EX  ›  DevOps

用 Walle 做 CI/CD , 构建 Node.js 项目, 在 npm install 的时候会出现问题

  •  
  •   kenshin912 · 2021-07-07 21:47:39 +08:00 · 2025 次点击
    这是一个创建于 995 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Docker-compose 起了个 Walle 服务 , 挂载了宿主机上的 JDK , Maven , Node.js 的目录进 Walle 容器.
    Maven 编译 Jar 包已经弄好了 , 剩下的就是前端 , 可是只要 npm install 就会出现各种奇怪的错误 , 看了下报错的解决方案 , 几乎都是和 node_modules 这个目录有关系 , 怎么都无法顺利 npm install .
    而且我还有个疑问 , 即使我顺利的让它 npm install 了, 也不能每次编译都 npm install 一次吧? 尝试用 ln -sfn 把 node_modules 软链接过来也会报错.
    我真的是服了. 本地拉了个 Jenkins 容器 , 随便折腾一下 , npm install 就很顺利 , run build 更顺利 ...
    用 Walle 主要看重它方便回滚 , Jenkins 我自己还要写脚本还要设置.
    有没有用 Walle 的大佬 , 让我看看你们的 Node.js 项目是怎么做的自动构建的呢?

    或者说 , 我是不是应该把 npm run build 的事情丢给开发 , 让他们 build 好了推到 gitlab 上得了 ? 感觉会被公司的开发打死...
    12 条回复    2021-07-08 16:17:20 +08:00
    hteen
        1
    hteen  
       2021-07-07 22:52:53 +08:00
    walle 好像都不维护了, 已经转投 spug

    https://www.spug.dev/docs/example-node/
    JerryCha
        2
    JerryCha  
       2021-07-07 23:26:02 +08:00
    「而且我还有个疑问 , 即使我顺利的让它 npm install 了, 也不能每次编译都 npm install 一次吧? 」
    ----------------------------------------------------------------------------------------------------------------------
    构建时不 install,新的依赖就不会被安装,你还是会被开发打死。
    Vegetable
        3
    Vegetable  
       2021-07-08 00:06:16 +08:00
    node_modules 在 ci 时必须要缓存的。
    chenluo0429
        4
    chenluo0429  
       2021-07-08 09:12:04 +08:00
    1. node_modules 缓存;
    2. 用 verdaccio 之类的搭建一个内网的 proxy registry ;
    我建议用第二个,保证每次构建过程都是完整的
    kenshin912
        5
    kenshin912  
    OP
       2021-07-08 10:09:02 +08:00
    @hteen #1 感谢 , 你发的链接 , 让我注意到了 spug 的 node example , 我在 walle 上用 yarn 成功的编译出 dist .
    kenshin912
        6
    kenshin912  
    OP
       2021-07-08 10:11:04 +08:00
    @JerryCha #2

    @Vegetable #3

    @chenluo0429 #4

    感谢 , 用了 yarn , 并且编译前设置了 yarn --cache-folder , 把缓存目录放到编译目录以外的地方 , 应该就可以了吧?
    basefas
        7
    basefas  
       2021-07-08 10:15:44 +08:00
    所以为什么不在 docker 里打包,然后制作成 docker 镜像呢
    kenshin912
        8
    kenshin912  
    OP
       2021-07-08 10:39:18 +08:00
    @basefas #7 开发没几个会用 Docker 啊 , 线上环境也不是 Docker , 我也很苦恼 .
    basefas
        9
    basefas  
       2021-07-08 11:16:16 +08:00
    @kenshin912 #8 如果只有 node 项目的话,可以考虑在 docker 里编译,然后将编译文件从容器中拷贝出来
    kenshin912
        10
    kenshin912  
    OP
       2021-07-08 14:42:58 +08:00
    @basefas #9 我的需求是开发那边 Merge 代码后 ,可以进行快速构建,上线并且可以快速回滚。
    你说的这个办法我可能没理解如何操作。。。
    我是拉一个 node.js 的 Docker image,然后启动一个容器 , 在这个容器中编译 ,然后 cp 生成的 dist 到容器外部嘛?
    basefas
        11
    basefas  
       2021-07-08 15:32:45 +08:00
    @kenshin912 #10 对的,而且你如果用 gitlab 的话,可以考虑使用 gitlab-ci 做 cicd
    kenshin912
        12
    kenshin912  
    OP
       2021-07-08 16:17:20 +08:00
    @basefas #11 这个要搭配 gitlab-runner 吧 ?
    之前我用 gitlab-runner 实现过 Merge 代码触发自动构建。
    但是针对回滚这块我就没接触了,现在用 Walle 也是图个方便回滚。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5853 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:56 · PVG 09:56 · LAX 18:56 · JFK 21:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.