加快詹金斯建设

Lou*_*ost 6 git amazon-web-services node.js npm jenkins

我有一个NodeJs应用程序.我有一个詹金斯的工作,做了gollowing:

  • 是git克隆
  • 运行NPM安装
  • 运行测试
  • gzips所有的html,css,js文件
  • 使用aws sync将静态内容发送到S3
  • Gzips非静态内容,以便以后可以将其部署到我们的舞台环境中.

我正在寻找改善构建的方法.我的一些想法

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

我还能做些什么来改善构建的时间吗?

nwi*_*ler 6

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

首先,尝试测量每个步骤(克隆、npm install运行测试、...)花费的时间,然后尝试改进每个步骤。您可以尝试专注于占用大部分时间的那个,或者您可以尝试在尝试破解更难的坚果之前获得一些快速的胜利

一些想法:

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

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