【问题标题】:How do I reduce the time for npm install across multiple TeamCity builds?如何减少跨多个 TeamCity 构建的 npm install 时间?
【发布时间】:2019-10-10 06:36:46
【问题描述】:

问题

  • 我们在 TeamCity 中有大量构建配置来处理许多相同包的 npm 安装
  • 因为我们需要对我们的许多构建(例如所有 PR)强制执行干净签出,所以永远不会重复使用给定构建中的 node_modules 文件夹
  • 我们构建的 npm install 部分需要 4 分钟,这大约是给定构建时间的 40%。
  • 每天在 10 个代理上进行数百次构建,这是一个值得减少的数字。

问题

根据我们的堆栈,在构建之间集中/重用 node_modules 文件夹的推荐方法是什么?

技术栈

  • Windows Server 2008 R2
  • 节点 LTS 4.x
  • TeamCity 9.x

我们的尝试

  • 使用npm cache -- 默认情况下会发生这种情况,因此至少我们不会每次都从 Internet 下载包。
  • node_modules 符号链接到一个公共目录 -- 这种方法有效(从几分钟到几秒钟),但不幸的是,在 Windows 上处理符号链接时,一些 gulp/grunt 任务会失败。呜呜呜。

我们正在尝试的其他方法

  • 在层次结构的上方创建一个node_modules 文件夹:不确定,但似乎节点可以分层搜索node_modules 文件夹。在这种情况下,在父目录中创建 node_modules 文件夹可能会解决此问题。
  • 使用NODE_PATH 环境变量 -- 不确定设置它是否会执行与上述类似的操作,并在我们的某个构建中找不到时提供一个通用的node_modules 文件夹。
  • 使用 Powershell 在备份目录之间来回切换Move-Item:如果我们必须破解它,可能值得为每个项目 ID 使用备份目录并使用 Move-Item,这应该会更新至少分区链接而不是复制文件。 That approach is outlined on this blog post

【问题讨论】:

  • @seanKillen 你有没有找到一个好的解决方案? - 我们的 jenkins 构建也有同样的问题
  • @pogorman 还没有——我们现在最好的方法是尝试Move-Item。既然我们正在处理 webpack 而不是 gulp,我想更多地尝试符号链接;不过,我无权访问我之前正在试验的服务器。希望尽快尝试。

标签: node.js npm teamcity


【解决方案1】:

您一直在做的是行业中的最佳实践。我不知道你是否可以使用 npm 让它变得更好。

你试过用纱线代替https://github.com/yarnpkg/yarn 也有一种方法可以与 docker 一起使用 https://hackernoon.com/using-yarn-with-docker-c116ad289d56#.8bhk0tkz4

【讨论】:

    【解决方案2】:

    我听说您可以关闭进度报告并显着加快速度: http://biercoff.com/how-to-crazy-easily-speed-up-your-npm-install-speed/

    【讨论】:

      【解决方案3】:

      你试过 docker 缓存吗?

      把你的npm install放到Dockerfile中,运行docker build

      FROM node:12
      
      WORKDIR /code
      
      COPY ./package.json ./package-lock.json /code
      
      RUN npm install # skiped when package.json/package-lock.json not changed.
      
      ADD . /code
      
      # do other things
      
      

      Docker build 为每个命令创建一个层(COPY/ADD/RUN),并在再次构建时将该层用作缓存(如果没有更改)。

      只要 package.json/package-lock.json 不变

      docker build 将使用缓存

      COPY ./package.json ./package-lock.json /code

      RUN npm install

      所以你不需要加速npm install,它只是跳过了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-16
        • 2011-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-11
        • 2018-07-11
        • 2020-07-17
        相关资源
        最近更新 更多