如何根据TaskContext中设置的变量取消Visual Studio Online构建?

时间:2017-09-20 18:51:20

标签: azure-pipelines azure-pipelines-build-task

任务1是PowerShell脚本。它设置变量##vso[task.setvariable variable=Metadata.ContinueGen;]false

任务2具有自定义条件,只有在满足eq(variables['Metadata.ContinueGen'], true)条件时才会运行。任务被跳过,这没关系。但是我仍然有一系列我不想参加的任务。

我想弄清楚如何在不必将条件应用于每个任务定义的情况下停止剩余的构建任务。

3 个答案:

答案 0 :(得分:1)

听起来你想在发生条件时停止构建..

如果你将它放在你的PowerShell脚本中,它将会出错并退出你的其余活动。

Write-Error ("Stopping Build steps, will not continue to the next")
exit 1

答案 1 :(得分:1)

自定义条件只能设置如何运行任务而不是以下所有任务。因此,您需要为以下所有任务设置自定义条件(如果您希望按自定义条件存档)。

但如果变量Metadata.ContinueGenfalse,则可以跳过/取消以下任务的另一种方式。详细步骤如下:

  1. 使用默认条件设置以下所有任务仅当所有先前任务都已成功时。
  2. 在任务之前添加 PowerShell任务以比较Metadata.ContinueGen的值是否为false。如果为false,则将jobstatus设置为已取消:

    Write-Host "##vso[task.setvariable variable=agent.jobstatus;]canceled"
    
  3. 如果Metadata.ContinueGen为false,则由于PowerShell任务的状态未成功,以下任务也将被取消。

答案 2 :(得分:1)

(其他答案也有效,但它们触发了失败/成功登录仪表板的操作。)

我创建了一个名为vstsabort的PowerShell脚本,以便在构建期间可以调用它以取消整个构建。

https://github.com/lextm/vstsabort

  1. 生成个人访问令牌,并确保已选择“构建(读取和执行)”范围。
  2. 将此标记作为新变量(例如system.pat)添加到“变量”部分下的管道中。确保单击“将变量类型更改为秘密”以锁定该值。
  3. 在管道中添加验证任务(例如,批处理脚本)。确保将“ $(system.pat)”作为参数传递。
  4. 在实际的批处理文件(在我的情况下为prepare.abort.bat)中,调用该实用程序,

批处理文件可能看起来像

echo no change. abort.
set LEXTUDIO_VSTSABORT=TRUE
set SYSTEM_PAT=%~1
powershell -executionpolicy bypass -File abort.ps1

然后在信息中心中,您可以看到此构建已被取消。