You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:52:52