Azure devops 如何在Azure DevOps管道上同时触发的管道之间设置优先级

Azure devops 如何在Azure DevOps管道上同时触发的管道之间设置优先级,azure-devops,azure-pipelines,build-pipeline,Azure Devops,Azure Pipelines,Build Pipeline,我正在使用Azure devOps构建和部署我的应用程序,在该应用程序中,我有一个项目正在被其他相关应用程序使用(我们称之为project N)。因此,我决定将这个项目部署为一个NuGet包,并在构建过程中使用它 项目N可能会经常更改,因此我在定义可靠的设置时遇到了一些困难: 仅当项目N及其依赖项发生更改时,才创建NuGet包 保证,如果要按照1)创建NuGet包,管道会在其他任何操作之前完成该操作 到目前为止,我的设置方式是有两个不同的管道,一个创建并部署NuGet包(NuGet管道),另一个

我正在使用Azure devOps构建和部署我的应用程序,在该应用程序中,我有一个项目正在被其他相关应用程序使用(我们称之为project N)。因此,我决定将这个项目部署为一个NuGet包,并在构建过程中使用它

项目N可能会经常更改,因此我在定义可靠的设置时遇到了一些困难:

  • 仅当项目N及其依赖项发生更改时,才创建NuGet包
  • 保证,如果要按照1)创建NuGet包,管道会在其他任何操作之前完成该操作
  • 到目前为止,我的设置方式是有两个不同的管道,一个创建并部署NuGet包(NuGet管道),另一个使用该NuGet包,然后构建并部署应用程序(主管道)

    问题是,当与Project N相关的文件和解决方案的一些剩余文件发生更改时,我不知道如何制定规则,说“在主管道之前运行NuGet管道”,因此目前我必须相信会发生这种情况的运气,如果不是的话,在两个构建完成后,我必须手动触发主管道。因为我想确保项目N中引入的新更改不会破坏解决方案


    有没有一种优雅的方法可以做到这一点?我可以设置一个触发器,每当管道NuGet完成时,它就会触发主管道,但通过这种方式,每当对项目N和解决方案的其余部分进行更改时,我就会触发主管道两次。

    我认为没有任何方法可以实现您想要的。如果两个作业的顺序很重要,则应将它们放在同一管道中。在管道中,可以在作业之间创建依赖关系

    但是,这意味着这两个作业将始终运行。这可能不是问题,因为在nuget push任务中,有一个忽略重复版本的选项(如果项目N没有更改,它仍然具有相同的版本):

    总而言之:

    • 创建一个包含2个作业的管道
    • 使“主管道”作业依赖于“Project N”作业
    • 在“Project N”管道中,确保启用“允许跳过重复数据”选项

    您无法控制单独管道的排队顺序。但是,您可以控制在管道中触发作业的顺序。因此,您应该作为一个带有一些条件的多作业管道来执行此操作,以确保仅在必要时运行适当的作业。@DanielMann NuGet软件包创建作业应仅在特定项目(解决方案中的多个文件中的多个文件)中的文件已更改时运行。我有没有办法在工作中详细说明这种情况?嗨,瑞西,你有没有机会实施保罗格特建议的解决方案?你能解决吗?嗨!是的,我做了,但它还不符合我想要满足的要求。稍后我将尝试他在评论中给我的建议,并在运行任务之前使用powershell脚本检查包中是否有更改。这就是为什么我决定保留这个问题,不接受他的回答。我认为你的建议是我能找到的解决我问题的最好办法。我还在测试,但我有一些限制,让我考虑坚持我现在的设置:1)我用YAML文件来描述流水线,而不是UI。我没有成功地将NuGet推送设置为“允许跳过重复项”。2) 有许多与此NuGet包创建相关的任务,例如,运行测试。即使我成功地将推送配置为“允许跳过重复项”,在每个生成上,这些任务都将执行,并且只跳过推送。您要查找的属性称为“AllowPackageConflicts”,您需要将其设置为true。关于额外的任务,如果这些任务运行,这真的是一个问题吗?除了在作业开始时编写powershell脚本以检查当前版本的Nuget软件包是否已经存在之外,我真的没有找到解决此问题的方法。问题是它给构建添加了不必要的时间。构建已经花费了太长的时间,而且还因为它可能会耗尽免费的每月构建分钟数。您可以使用powershell脚本,使用find package()检查当前包版本是否已在Nuget中。如果将此项添加到作业的开头,则可以根据检查结果对其余任务设置条件