首页 > 解决方案 > 管道 - 如果至少一个先前的作业成功,则运行一个作业

问题描述

我有一个作业 A、B、C、D 的列表......无论上一个作业是否成功,它们都会运行。

最后一个是工件发布,将由发布管道使用。如果以前的作业都没有成功,不想运行它。

我需要部署任何不会失败的服务(因此我需要传递失败的服务创建),但如果全部失败,则阻止自动启动链接的发布管道。

管道

这是 Azure 给出的 YAML 代码

pool:
  name: Default
  demands:
  - msbuild
  - visualstudio

steps:
- task: VSBuild@1
  displayName: 'Generate Solution'
  inputs:
    solution: LisaMES.sln
    platform: '$(PlatformName)'
    configuration: '$(ConfigurationName)'


- task: ArchiveFiles@2
  displayName: 'Create Service A'
  inputs:
    rootFolderOrFile: '$(ServiceName)\bin\$(ConfigurationName)'
    includeRootFolder: false
    archiveFile: 'Bin_Services/$(ServiceName)_$(ConfigurationName).zip'
  condition: succeededOrFailed()



- task: ArchiveFiles@2
  displayName: 'Create Service B'
  inputs:
    rootFolderOrFile: '$(ServiceName)\bin\$(ConfigurationName)'
    includeRootFolder: false
    archiveFile: 'Bin_Services/$(ServiceName)_$(ConfigurationName).zip'
  condition: succeededOrFailed()



 ... C D E F like this


- task: PublishPipelineArtifact@0
  displayName: 'Publish Pipeline Artifact'
  inputs:
    artifactName: Services
    targetPath: 'Bin_Services'
  condition: succeededOrFailed()

标签: yamlazure-pipelinesjobs

解决方案


PublishPipelineArtifact@0删除当前读取的条件,无论前面的任务是否成功或已发布,此任务都将运行。

Even if a previous dependency has failed, unless the run was canceled. Use succeededOrFailed() in the YAML for this condition.

除非出于某种原因您想要发布成功的工件子集(这可能导致构建状态不一致,因为相同的构建可能会产生不同的工件)建议从所有任务中删除条件。默认行为是仅在前面的任务成功时才运行每个任务。


推荐阅读