gpt4 book ai didi

node.js - 加速 Jenkins 构建

转载 作者:搜寻专家 更新时间:2023-10-31 22:32:50 25 4
gpt4 key购买 nike

我有一个 NodeJs 应用程序。我有一份 Jenkins 的工作,负责执行以下操作:

  • 做一个 git clone
  • 运行 NPM 安装
  • 运行测试
  • 对所有 html、css、js 文件进行 Gzip 压缩
  • 使用 aws sync 将静态内容发送到 S3
  • 对非静态内容进行 Gzip 压缩,以便稍后可以将其部署到我们的舞台环境中。

我正在寻找改进构建的方法。我的一些想法

  • 也许缓存 Node 模块而不是每次都运行 npm install
  • 使用artifactory作为本地 Node 模块存储
  • 并行运行 aws sync 命令
  • 使用 s3cmd 命令而不是 aws sync(我们遇到一个问题,aws sync 将相同的文件发送到 S3,因为 git clone 更改了文件的修改时间)
  • 使用 git diff 获取更改的文件列表,并且只将这些文件发送到 S3

我还能做些什么来缩短构建时间吗?

最佳答案

一些好主意 - 这是我也会考虑的:

首先,尝试测量每个步骤(克隆、npm install、运行测试、...)花费的时间,然后尝试改进每个步骤。您可以尝试将注意力集中在占用大部分时间的事情上,也可以尝试先快速取胜,然后再尝试解决更难的问题。

一些想法:

  • 你每次都需要做一个git clone吗?也许考虑做一个 git pull 来代替。在构建结束时,执行 git reset --hard ; git clean -f -d 作为删除任何未提交或本地更改文件的最后一步。我发现这样做比每次都执行完整的 git clone 要快得多。
  • npm install:与上述步骤一致,如果您保留之前构建的 node_modules 文件夹,这一步应该也会快很多。当然存在更新或删除依赖项的风险,这些风险仍然存在。许多代码更改不需要您重新安装所有 Node 模块。您甚至可以添加一些逻辑来检测 package.json 文件自上次构建以来是否发生了变化,并且只在其中运行完整的 npm install案例。
  • 我已经通过运行一个完整、干净的构建的夜间构建解决了上述问题:每天一次全新的 git clone 和一个完整的 npm install。白天的所有其他构建都使用以前的构建状态,因此速度更快。如果您发现这会导致错误的结果,您可以安排干净的构建每天运行几次。
  • 调整 s3cmd/aws 命令 - 我认为它们的工作方式与 rsync 类似,如果使用得当,它会非常快速和高效。只有在万不得已时才尝试使用 git diff 路由。执行 git pull 而不是 git clone 可能已经解决了这个问题。
  • 一般来说,尝试了解是否所有步骤都需要在每次构建时运行,或者您是否可以将其中一些步骤移至其他构建计划或其他时间段(晚上?)。如果构建计划的主要目的是运行单元测试以向开发人员提供快速反馈,那么也许您不需要每次都压缩/复制/部署应用程序。或者将其分成两个构建计划,一个运行测试并快速返回,另一个执行所有部署。将其放在单独的构建计划中将使您能够灵活地安排时间。

这些是我将作为第一步尝试的一些初步想法。

关于node.js - 加速 Jenkins 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33556851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com