首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VSTS多阶段构建运行nuget还原和npm并行安装

VSTS多阶段构建运行nuget还原和npm并行安装
EN

Stack Overflow用户
提问于 2018-06-25 14:48:40
回答 2查看 329关注 0票数 1

我有一个构建,在预编译阶段,nuget还原需要3分钟从缓存恢复包,npm也是如此。

这两个从缓存恢复可以并行运行,但我不清楚这是否可能使用VSTS阶段

每个阶段可以使用不同的药剂。您不应该假设早期阶段的状态在后续阶段是可用的。

我需要的是一种将包和node_modules目录的内容从两个不同的阶段传递到调用编译器的第三个阶段的方法。

对于VSTS阶段,这是可能的吗?

EN

回答 2

Stack Overflow用户

发布于 2018-06-25 15:41:28

我不会分阶段这么做的。我会考虑不去做。还原包(不管类型如何)是一种I/O绑定操作--您不太可能从并行化中获得太多好处。事实上,它可能会慢一些。还原软件包所花费的大部分时间要么是等待文件下载,要么是在磁盘上复制文件。下载两倍的文件只需要两倍的时间。同时复制两个文件要花费双倍的时间。这是粗略地说,当然--在某些情况下,它可能会更快一些,但对于一般情况来说,它不太可能显著加快。

也就是说,您可以编写一个脚本来分离两个独立的作业,然后等待它们完成。就像这样,在PowerShell中:

代码语言:javascript
运行
复制
$dotnetRestoreJob = (Start-Job -ScriptBlock { dotnet restore } ).Id
$npmRestoreJob = (Start-Job -ScriptBlock { npm install } ).Id

do {
    $jobStatus = Get-Job -Id @($dotnetRestoreJob, $npmRestoreJob)
    $jobStatus
    Start-Sleep -Seconds 1
}
while ($jobStatus | where { $_.State -eq 'Running' })

当然,您可能希望捕获作业的输出并检查是否有成功的退出代码或失败的退出代码,但这是总的想法。

票数 2
EN

Stack Overflow用户

发布于 2018-06-28 10:33:08

这里真正的问题并不是VSTS承载的代理npm installnuget restore不可能在托管代理上并行运行。不是的。一个真正的问题是宿主代理没有按设计使用nuget缓存。

我们已经确定这个问题不是一个问题。宿主代理每次排队新构建时都会下载nuget包。无法使用宿主代理加速此nuget还原步骤。

https://developercommunity.visualstudio.com/content/problem/148357/nuget-restore-is-slow-on-hostedagent-2017.html

因此,将nuget恢复时间从240到20年代的解决方案是将其转移到本地代理。这样就可以使用本地缓存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51026279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档