【问题标题】:Pipeline - Run a job if at least one previous job succeed管道 - 如果至少一个先前的作业成功,则运行一个作业
【发布时间】:2021-08-27 12:49:57
【问题描述】:

我有一个作业 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()

【问题讨论】:

  • 你能提供你的 YAML 代码吗?我假设这些作业已经设置为并行运行?
  • 否,作业没有并行运行。我可以提供 Azure 生成的 YAML 代码,但我无法编辑它

标签: yaml azure-pipelines jobs


【解决方案1】:

删除PublishPipelineArtifact@0 上的条件,因为如果前面的任务成功或已发布,它当前读取此task will run irregardless

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

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

【讨论】:

  • 我需要在接下来的版本中发布我的服务的工件。
  • 你不需要所有的工件吗?如果某些工件因设计而失败,则建议重新评估您如何使用管道。除非您添加删除它们,否则管道应始终根据输入生成相同数量/类型的工件。
  • 我正在制作一个包含不同数量文件的工件
猜你喜欢
  • 1970-01-01
  • 2021-12-01
  • 2022-12-14
  • 2021-08-06
  • 2019-07-18
  • 2022-10-17
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
相关资源
最近更新 更多