[英]Azure DevOps Build pipeline `npm install` failing on node-gyp
我们有一个 CD/CI Azure Devops 构建管道,该管道已开始因nodejs/node-gyp
失败。
error gyp info using node-gyp@3.8.0
error gyp info using node@16.13.0 | win32 | x64
我们的构建管道没有任何变化,我们使用的池是:
pool:
vmImage: 'windows-latest'
哪个仍然映射到windows-2019
https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops&tabs=yaml 。
当我们在 YAML 文件中执行以下任务时,管道会失败:
- task: Npm@1
displayName: 'npm install'
inputs:
command: 'install'
workingDir: 'FrontEnd'
verbose: true
日志文件:
error gyp ERR! UNCAUGHT EXCEPTION
error gyp ERR! stack Error: spawn C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\15.0\Bin\MSBuild.exe ENOENT
error gyp ERR! stack at Process.ChildProcess._handle.onexit (node:internal/child_process:282:19)
error gyp ERR! stack at onErrorNT (node:internal/child_process:477:16)
error gyp ERR! stack at processTicksAndRejections (node:internal/process/task_queues:83:21)
error gyp ERR! System Windows_NT 10.0.17763
error gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "D:\\a\\1\\s\\Presentation\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
error gyp ERR! cwd D:\a\1\s\FrontEnd\node_modules\node-sass
error gyp ERR! node -v v16.13.0
error gyp ERR! node-gyp -v v3.8.0
error gyp ERR! This is a bug in `node-gyp`.
error gyp ERR! Try to update node-gyp and file an Issue if it does not help:
error gyp ERR! <https://github.com/nodejs/node-gyp/issues>
error Build failed with error code: 7
verbose exit 1
##[error]Error: Npm failed with return code: 1
我们在 npm/node 版本中遇到的问题指向 node-gyp 作为罪魁祸首,如此处所示。 如果特定组件异常下未显示冲突版本,则当 npm 安装运行时,npm/node 版本会显示在用户代理下
在 npm 安装任务下,用户代理显示为:
user-agent = "npm/6.14.15 node/v16.13.0 win32 x64"
运行“windows-latest”图像时。
使用上一个答案中的节点工具,上面的内容变为:
user-agent = "npm/6.14.15 node/v14.18.1 win32 x64"
这个问题类似于Azure DevOps Pipeline NPM install task failed with node-gyp build error
Azure 自动更新了它正在使用的节点版本,也将所需的 node-gyp 版本向前推,这导致我们所有的构建失败。 它推送到的版本是:
添加task: NodeTool@0
将节点版本设置为最后通过的版本,对我们来说是:
最终代码如下所示:
- task: NodeTool@0
inputs:
versionSpec: '14.x'
- task: Npm@1
displayName: 'npm install'
inputs:
command: 'install'
workingDir: 'FrontEnd'
verbose: true
重新运行管道后,它再次工作并产生人工制品。
对于那些不使用 yaml 和经典编辑器的人:
对于经典编辑器用户:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.