Azure DevOps版本跳过任务

时间:2020-10-07 13:31:07

标签: azure deployment azure-devops release continuous-deployment

我目前正在为Azure DevOps 2020(内部)中的公司实施CI / CD管道。我似乎无法方便地解决一个需求:根据发布管道中的用户输入跳过某些任务。

我想要的东西: 用户手动创建新的版本并确定是否应执行任务组。

代理任务:

 1. Powershell
 2. Task Group (conditional)
 3. Task Group
 4. Powershell

我尝试过的事情:

  • 根据手动干预任务,将任务分为具有任务组的多个作业。
    • 不起作用,如果手动干预被拒绝,则整个执行将因失败而停止。
  • 将任务分为多个阶段,与上述步骤几乎相同,并且结果相同。
  • 将任务分为多个阶段会手动触发每个阶段。
    • 不是很有用,因为您必须按照正确的顺序并在上一步成功之后执行所需的操作。
  • 在版本创建时设置的变量(是/否)。
    • 将使用它,如果没有更好的方法出现,但是很容易出现错别字,并且对于使用此方法的同事来说不是很有用。不幸的是,Azure DevOps似乎不支持版本的下拉列表或复选框变量。 (但可以在构建中使用参数)
  • 分为两个阶段,一个阶段执行任务1,2,3,4,另一个阶段进行任务1,3,4。
    • 由于重复对我来说不是很理想。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

取决于运行管道的标准。一个建议是两条调用同一模板的管线。并且每个管道中都可以嵌入一个true / false,以作为参数传递给模板。

模板中将定义所有任务;但是,有条件的人将具有以下条件:

 condition: and(succeeded(), eq('${{ parameters.runExtraStep}}', true)) 

此条件将在任务级别设置。

可以在相应的管道中定义任何特定的触发器。

这是Azure YAML Templates上的文档,可以帮助您入门。

答案 1 :(得分:1)

不幸的是,不可能为任务组添加自定义条件,但是此功能已列入路线图。检查以下用户语音,即可对其进行投票:

https://developercommunity.visualstudio.com/idea/365689/task-group-custom-conditions-at-group-and-task-lev.html

解决方法是,您可以克隆发行定义(右键单击发行定义>克隆),然后删除一些任务或任务组并保存,然后您可以针对具体情况创建具有相应发行定义的发行。 / p>

答案 2 :(得分:0)

最后,我决定坚持使用Releases并将我的任务分成3个代理工作。具有第一个Powershell的作业1,具有条件任务组的作业2,只有在变量为true时才执行,而具有其余任务的作业3。

正如cece-dongdreadedfrost所述,对于yaml管道,我可以为条件实现可选的运行时参数。不幸的是,其中一个任务组需要Yaml管道中的特定工件。在大多数情况下,它是“最新的”,可以通过下载工件任务轻松实现,但有时会选择先前的工件。我发现没有一种简单的方法可以像在默认情况下具有包含工件列表的下拉列表那样便捷的方式中实现此目标。

如果找到this blog post,以供对如何处理yaml管道中的不同构建工件感兴趣的任何人。

感谢您的帮助!