仅构建已更改的项目

时间:2019-12-12 23:24:42

标签: azure-devops nuget azure-pipelines

我有一个包含多个类库项目的.NET解决方案,每个解决方案都使用azure-devops作为nuget feed发布。

然后,我有一个azure-devops构建管道,其中包括还原,构建,发布,打包和推送的步骤。 前4个步骤是针对** / .csproj设置的,最后一个是带有目标Feed的$(Build.ArtifactStagingDirectory)/ .nupkg。

我已完成所有工作并可以正常工作,除非您仅更改一个项目,否则由于** / *。csproj,它会构建所有项目。

这对nuget软件包不利,因为它会增加每个项目的版本号,并且它们都显示为在nuget软件包管理器中具有可用更新。

我的问题:有没有办法做到这一点,只有经过变更的项目才能通过该过程?

1 个答案:

答案 0 :(得分:1)

  

是否有办法做到这一点,只有经过变更的项目才能通过?

答案是肯定的。

解决方案是使用私有代理而不是托管代理来构建您的解决方案。

因为每次分配给我们的托管代理都是一台干净的机器,VS / MSbuild都会为设置**/* csproj构建所有项目。因此,要解决此问题,我们必须保存上次构建的结果以实现增量构建。

因此,要解决此问题,我们需要设置一个私有代理来构建那些项目,并且在运行构建之前不要清除私有代理的工作目录:

在“获取源”上将“清除”选项设置为false:

enter image description here

注意:由于您还为任务nuget push设置了**/*.csproj,因此,如果未修改项目,则此命令会将相同版本的feed推送到feed,它将引发冲突错误,因此需要启用允许重复项在nuget push任务中被跳过:

enter image description here

希望这会有所帮助。