我们正在使用TeamCity构建一个Angular Web应用程序,该应用程序涉及一个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.
答案 0 :(得分:0)
我们怀疑这些失败是由两个或多个并发运行的构建引起的,并且都试图访问相同的npm缓存。
假设这确实是导致问题的原因,有几种方法可以缓解这种情况或彻底阻止它。
将并发版本限制为1 。这假设只有一个构建配置用于碰撞的构建。是的,这可能会略微降低您的管道速度。如果有什么我建议这样做,看看问题是否消失,这会将并发npm install
s与此构建错误相关联。此设置位于构建配置的“常规设置”部分中。
使用Docker容器。根据您对集装箱化的熟悉程度,这可能并非易事。容器会隔离每个构建的文件系统,用户等,这将解决假定的问题;除非您故意在容器之间共享卷,否则npm install
将与构建完全隔离。我特意说Docker,因为我知道他们支持Windows,你的代理似乎是这样。
使用按需云代理以便宜的方式运行代理和服务帐户1:1 。我们使用AWS EC2实例作为云构建代理,我们只需支付每个代理使用的时间。 Cloud Agent文档可以be found here。