【问题标题】:Only build the project that has changed仅构建已更改的项目
【发布时间】:2019-12-12 23:24:42
【问题描述】:

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

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

我已经完成了所有设置并且可以正常工作,除非您只更改一个项目,因为 **/*.csproj,它会构建所有项目。

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

我的问题:有没有办法做到这一点,以便只有有变化的项目才能通过这个过程?

【问题讨论】:

  • 根据我使用 monorepos 的经验,解决方案通常是最小的发布单元 - 您能描述一下您想要一个包含多个不同版本的可部署项目的单一解决方案的理由吗?

标签: azure-devops nuget azure-pipelines


【解决方案1】:

有没有办法做到这一点,以便只有有变化的项目才能通过这个过程?

答案是肯定的。

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

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

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

在 Get sources 上将 Clean 选项设置为 false:

注意:由于您还为任务nuget推送设置了**/*.csproj,如果项目没有修改,该命令会将相同版本推送到feed,它会抛出冲突错误,您需要启用允许重复跳过 nuget 推送任务:

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    相关资源
    最近更新 更多