Azure Pipelines:按工件名称过滤触发器,控制阶段触发
解决方案
针对你的需求,分两种场景实现:
场景1:仅在特定工件存在时触发下游流水线
如果希望下游流水线只在上游发布了指定工件时才触发,可以通过上游流水线添加构建标签,下游流水线基于标签过滤触发器来实现:
上游流水线修改(添加标签)
在发布每个工件后,添加对应的构建标签:
# 上游流水线发布WPF工件并打标签 - task: PublishPipelineArtifact@1 inputs: targetPath: '$(Build.ArtifactStagingDirectory)\WPF' publishLocation: 'pipeline' artifact: 'WPF' - script: echo "##vso[build.addbuildtag]has-WPF" # 上游流水线发布Xamarin工件并打标签 - task: PublishPipelineArtifact@1 inputs: targetPath: '$(Build.ArtifactStagingDirectory)\Xamarin' publishLocation: 'pipeline' artifact: 'Xamarin' - script: echo "##vso[build.addbuildtag]has-Xamarin"
下游流水线修改(基于标签触发)
修改资源触发器,仅当上游流水线包含对应标签时触发:
resources: pipelines: - pipeline: 'resName' source: '\Folder\PipelineName' trigger: tags: # 可选:同时支持两种标签,只要有其中一个就触发 - has-WPF - has-Xamarin
如果只需要在有WPF工件时触发,就只保留has-WPF标签即可。
场景2:下游流水线触发后,仅运行对应工件存在的Stage
如果下游流水线需要被上游触发,但只运行存在对应工件的Stage,可以通过Stage的条件表达式来判断上游工件是否存在:
下游流水线修正后的配置
注意:你原配置中存在Stage名称重复(两个stage1),且YAML结构错误(Steps必须嵌套在Job下),修正后的配置如下:
resources: pipelines: - pipeline: 'resName' source: '\Folder\PipelineName' trigger: true stages: - stage: stage_WPF # 仅当上游存在WPF工件时运行此Stage condition: containsValue(resources.pipeline.resName.artifacts.*.name, 'WPF') jobs: - job: steps: - checkout: none clean: true - download: resName artifact: WPF - stage: stage_Xamarin # 仅当上游存在Xamarin工件时运行此Stage condition: containsValue(resources.pipeline.resName.artifacts.*.name, 'Xamarin') jobs: - job: steps: - checkout: none clean: true - download: resName artifact: Xamarin
这里使用containsValue表达式函数检查上游流水线的工件列表中是否包含指定名称的工件,若不存在则跳过对应Stage。
内容的提问来源于stack exchange,提问作者JuanDYB
相关产品推荐
相关产品推荐

