如何基于VSTS发布定义实现触发构建对应NuGet包的按需发布
实现VSTS发布仅处理触发构建的对应NuGet包构件
嘿,我明白你的需求了——就是想让每个构建触发发布时,只处理它自己生成的NuGet包构件,其他构建的内容完全不掺和进来对吧?这事儿不难,按下面的步骤配置就行:
给每个构建定义绑定专属标识
先给每个对应不同NuGet包的构建定义做个区分:要么用它们本身的Build.DefinitionName(就是你给构建起的名字),要么在构建定义里加个自定义变量(比如叫TargetPackage),给每个构建赋值对应的包名(比如PackageA、PackageB)。这样后面发布的时候就能识别出来是哪个构建触发的了。给每个发布步骤加条件判断
你的发布流程里应该有对应每个NuGet包的“下载构件”+“发布NuGet”任务组对吧?给每个任务组加个执行条件,只有触发发布的构建匹配时才运行:- 点任务右上角的三个小点点,选「条件」
- 把「运行此任务」改成「自定义条件」
- 输入判断表达式,比如用构建名称的话:
要是用自定义变量eq(variables['Build.DefinitionName'], 'PackageA-构建定义')TargetPackage的话,就写成:eq(variables['TargetPackage'], 'PackageA')
这样一来,只有触发发布的构建是对应那个时,这个任务组才会跑,其他的直接跳过,完全不影响。
优化构件下载的精准性
另外在「下载构件」任务里,也可以直接设置只拉取触发本次发布的构建产物:- 打开「下载构件」的设置面板
- 在「构建定义」选项里,选「特定构建定义」,然后用变量
Build.DefinitionId来动态匹配触发的构建ID - 这样这个任务就只会下载当前触发构建生成的构件,不会去拉其他构建的内容,更精准。
举个实际例子:如果你的两个构建定义叫「PackageA-Build」和「PackageB-Build」,那对应发布步骤的条件就分别设成:
- PackageA的发布任务条件:
eq(variables['Build.DefinitionName'], 'PackageA-Build') - PackageB的发布任务条件:
eq(variables['Build.DefinitionName'], 'PackageB-Build')
这样当PackageA的构建完成触发发布时,只有PackageA的下载和发布任务会执行,PackageB的任务因为条件不满足直接跳过,完全符合你要的效果!
内容的提问来源于stack exchange,提问作者Anders Jönsson
相关产品推荐
相关产品推荐

