并发构建导致在TeamCity上npm安装失败

时间:2017-11-17 17:00:24

标签: npm teamcity npm-install

我们正在使用TeamCity构建一个Angular Web应用程序,该应用程序涉及一个npm安装构建步骤。

此间歇性失败,出现以下错误(略微编辑以删除商业敏感细节)。我们怀疑这些失败是由两个或多个并发运行的构建引起的,并且都试图访问相同的npm缓存。

  • 有三个构建服务器,每个服务器都有三个构建代理。
  • 所有代理共享相同的服务帐户(因此具有相同的用户配置文件和npm缓存位置)。由于我们是一家非常大的公司,因此创建单独的帐户并非易事。

我们可以做些什么来确保并发的npm安装不会相互冲突吗?

[11:04:27][Step 7/16] npm install (1m:23s)
[11:04:27][npm install] Executing npm via wrapping shell script
[11:04:27][npm install] Starting: cmd /c npm install
[11:04:27][npm install] in directory: D:\BuildAgent2\work\c97ce2d45f888f8a\My-Project
[11:05:51][npm install] npm ERR! Windows_NT 6.3.9600
[11:05:51][npm install] npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install"
[11:05:51][npm install] npm ERR! node v6.9.1
[11:05:51][npm install] npm ERR! npm  v3.10.8
[11:05:51][npm install] npm ERR! path C:\Users\SVC_PITeamCityAgnt\AppData\Roaming\npm-cache\braces\0.1.5\package.tgz.2069119258
[11:05:51][npm install] npm ERR! code EPERM
[11:05:51][npm install] npm ERR! errno -4048
[11:05:51][npm install] npm ERR! syscall rename
[11:05:51][npm install] 
[11:05:51][npm install] npm ERR! Error: EPERM: operation not permitted, rename 'C:\Users\SVC_PITeamCityAgnt\AppData\Roaming\npm-cache\braces\0.1.5\package.tgz.2069119258' -> 'C:\Users\SVC_PITeamCityAgnt\AppData\Roaming\npm-cache\braces\0.1.5\package.tgz'
[11:05:51][npm install] npm ERR!     at Error (native)
[11:05:51][npm install] npm ERR!  { Error: EPERM: operation not permitted, rename 'C:\Users\SVC_PITeamCityAgnt\AppData\Roaming\npm-cache\braces\0.1.5\package.tgz.2069119258' -> 'C:\Users\SVC_PITeamCityAgnt\AppData\Roaming\npm-cache\braces\0.1.5\package.tgz'
[11:05:51][npm install] npm ERR!     at Error (native)
[11:05:51][npm install] npm ERR!   errno: -4048,
[11:05:51][npm install] npm ERR!   code: 'EPERM',
[11:05:51][npm install] npm ERR!   syscall: 'rename',
[11:05:51][npm install] npm ERR!   path: 'C:\\Users\\SVC_PITeamCityAgnt\\AppData\\Roaming\\npm-cache\\braces\\0.1.5\\package.tgz.2069119258',
[11:05:51][npm install] npm ERR!   dest: 'C:\\Users\\SVC_PITeamCityAgnt\\AppData\\Roaming\\npm-cache\\braces\\0.1.5\\package.tgz' }
[11:05:51][npm install] npm ERR! 
[11:05:51][npm install] npm ERR! Please try running this command again as root/Administrator.

1 个答案:

答案 0 :(得分:0)

  

我们怀疑这些失败是由两个或多个并发运行的构建引起的,并且都试图访问相同的npm缓存。

假设这确实是导致问题的原因,有几种方法可以缓解这种情况或彻底阻止它。

  1. 将并发版本限制为1 。这假设只有一个构建配置用于碰撞的构建。是的,这可能会略微降低您的管道速度。如果有什么我建议这样做,看看问题是否消失,这会将并发npm install s与此构建错误相关联。此设置位于构建配置的“常规设置”部分中。

  2. 使用Docker容器。根据您对集装箱化的熟悉程度,这可能并非易事。容器会隔离每个构建的文件系统,用户等,这将解决假定的问题;除非您故意在容器之间共享卷,否则npm install将与构建完全隔离。我特意说Docker,因为我知道他们支持Windows,你的代理似乎是这样。

  3. 使用按需云代理以便宜的方式运行代理和服务帐户1:1 。我们使用AWS EC2实例作为云构建代理,我们只需支付每个代理使用的时间。 Cloud Agent文档可以be found here