Nodejs npm步骤在TeamCity中的每个构建上下载包

Joe*_*Joe 14 teamcity build node.js npm

当谈到nodejs npm时,我有点像n00b,但是由于在我们的构建环境中使用几篇文章推荐的步骤实现它,它的构建时间增加了三倍.

我们将它用于标准的东西(minify/concat/etc js/css/etc)

我们使用TeamCity并添加了一个Node.js NPM步骤然后执行任务(RE:https://github.com/jonnyzzz/TeamCity.Node)

设置NPM的任务花费最多的时间,2分10秒,这占调用命令"npm install"的总构建时间的65%,这似乎重新下载每个构建的所有包

步骤3/7:NPM设置(Node.js NPM)(2m:10s)

[npm install]开始:cmd/c npm install

之前的总构建时间约为1分30秒,包括单元测试.

无论如何在本地缓存这些并阻止在每个构建上重新下载?在用户配置文件或可能与构建文件夹相对的东西?

更多详情..

这可能最好地解释了设置http://www.dotnetcurry.com/visualstudio/1096/using-grunt-gulp-bower-visual-studio-2013-2015

我们有使用新的Task Runner Explorer的C#项目,依赖关系被保存到package.json中,你在你工作区的本地环境中预先运行"npm install"一次(需要使用.tfignore来防止它从签入到源)然后不再,除非你启动一个新的本地工作区.

在构建运行时,它需要从命令行运行"npm install",它从package.json文件中获取依赖项,并且每次都将它们安装到构建工作目录内的子文件夹中,即使文件已经存在从以前的版本(即TC代理没有清理它们),afaik你不能将它们安装在工作文件夹之外.

我可能是错的......或者我应该说我希望我错了,并寻找一种方法来支持这一点,但我们使其工作的任何方式都需要与任务跑者探险家合作以便F5体验他们当地的开发人员仍然是一样的.

我们确实有多个代理商.

sfe*_*cik 11

我不知道Node.js,但这里有一些特定于TeamCity的建议:

  1. NPM可能会将文件下载到%TEMP%?如果是这样,它们将无法在后续TeamCity构建之间重复使用,因为TeamCity代理程序劫持了%TEMP%目录(将其重定向到<TeamCity Home>/buildAgent/temp/buildTmp)并且在每次新构建之前始终完全擦除此目录.(见buildTmp 这里.)
    • 从这个意义上说,如果您可以指示NPM将下载的文件存储在工作区(您检查构建的目录)中,那将更为可取.
  2. 如果NPM 正在下载到工作区(结账目录),您是否可能要求在每次运行时都进行干净的结账?(请参阅编辑配置设置 | 版本控制设置 | 显示高级选项 | 清除构建前复目录中的所有文件复选框.)
    • 在这种情况下,取消选中该复选框.
  3. 由于磁盘空间不足,TeamCity是否可以清理checkout目录?当TeamCity注意到它的空间不足时,这种清理会自动启动.(使用可用磁盘空间构建功能可以使清理更加激进.)
    • 在这种情况下,请停止使用构建功能.如果它没有被使用并且自动清理是罪魁祸首,则很难控制.最好是简单地清理文件系统中那些不由TeamCity(您自己%TEMP%和其他地方)管理的部分,从而为TeamCity提供一些余地.
  4. 您的构建每次都在不同的代理上运行吗?(查阅构建历史记录.)如果是这样,它不能重复使用下载的工件(即使它们被下载到checkout目录中),因为它们每次都被下载到不同的机器的文件系统.我怀疑是这种情况,因为TeamCity倾向于代理 - 工作空间重用(坚持使用相同的代理).
    • 在这种情况下,您可以通过设置代理程序要求来强制代理程序重用,指定您希望构建程序始终在一个特定代理程序上运行.您还可以将该代理单独放入其自己的池中,以便不能在其上运行其他构建.


Joe*_*Joe 6

我发现修复此问题的最佳方法是备份/恢复节点模块文件夹,我在这里做了一篇关于它的博客文章

https://beerandserversdontmix.com/2016/06/04/teamcity-and-avoiding-redownloading-of-npm-packages/