Azure DevOps Pipelines Npm任务极慢:安装1200个包耗时13分钟
区域速度差异确认
Azure不同区域的公共网络出口链路到npm官方源的路由、带宽质量确实存在明显差异,出现East US 2比West Europe慢十几倍的情况是可能的,不是个例,高峰时段East US 2到npmjs.org的链路拥堵是已知偶发问题。
先排除自身配置问题的排查步骤
- 确认npm源配置一致性:在两个区域的管道中都添加一步脚本任务执行
npm config get registry,检查是否使用了相同的npm源,若其中一个账号配置了区域就近的私有源/缓存源,也会产生巨大的速度差。 - 检查缓存配置逻辑:Azure DevOps缓存默认会将分支名纳入缓存key的计算规则,所以默认无法跨分支共享。你可以修改缓存key的配置,仅保留
package-lock.json/yarn.lock/pnpm-lock.yaml的哈希值作为核心缓存key,去掉分支相关变量,即可实现锁文件不变的情况下跨分支命中缓存。 - 测试链路质量:在East US 2的管道中临时添加一个脚本任务,执行命令
curl -w "%{time_total}\n" -o /dev/null -s https://registry.npmjs.org/react/-/react-18.2.0.tgz,检测单包下载耗时:如果耗时超过1s,基本可以确认是区域链路本身的问题,而非你的配置错误。
现有配置可补充的优化项
你当前的npm install参数已经覆盖了主流优化点,还可以补充以下调整:
- 新增
--progress=false参数,关闭安装过程的进度输出,可减少日志IO带来的少量耗时 - 可将npm源切换为对应区域的Azure Artifacts上游源,走Azure内部网络拉取包,规避公共网络链路波动
- 若长期遇到该区域链路问题,可以考虑将托管的DevOps服务迁移到West Europe区域,或使用West Europe区域的自托管代理执行npm安装任务
内容的提问来源于stack exchange,提问作者Syska
相关产品推荐
相关产品推荐

