如果手动干预任务被拒绝,是否可以将发布标记为成功?

时间:2019-06-05 13:23:25

标签: azure-devops azure-pipelines

我目前正在尝试为服务结构部署创建azure发布管道。我的测试环境只有一个阶段,其中包含多个作业/任务。

成功部署到环境后,我们将运行集成测试和冒烟测试。

在冒烟测试之后,我插入了一个手动干预任务,以使Devs可以选择运行回归测试(恢复)或退出过程(拒绝)。 如果所有先前的任务(部署,集成和冒烟)都通过并且手动干预被拒绝,我想将发布管道标记为成功。

如果通过恢复响应手动干预,则以下任务的结果应确定发布管道的结果。

我找不到这样的例子,因此感觉像是不正确的方法。更好的选择是引入一个中间环境,通过成功的烟雾测试对回归环境进行回归测试吗?

1 个答案:

答案 0 :(得分:0)

根据设计,当用户拒绝干预时,发布状态将变为“失败”。

我认为此问题的解决方法:

1)用户总是“恢复”干预,但“评论”会有所不同。

2)之后,在回归测试之前添加PowerShell任务以检查先前的注释,并在注释属于“运行测试”的情况下将其值设置为“ true”。

3)在回归测试任务中,将自定义条件设置为仅在新变量等于“ true”时才运行。

例如,如果批准通过“运行测试”继续进行干预,则将执行回归测试。因此,您需要一个PowerShell脚本来检查批准的内容,如果批准文本为“运行测试”,我们将设置一个新变量runTest = true

$url = $(System.TeamFoundationServerUri)$(System.TeamProject)/_apis/Release/releases/$(Release.ReleaseId)/manualinterventions?api-version=5.0
$header = @{ Authorization = "Bearer $env:System_AcessToken" }
$release = Invoke-RestMethod -Uri $url -Method Get -ContentType application/json -Headers $header
$comment = $release.value.comments
if($comment -eq "Run Tests")
{
    Write-Host "##vso[task.setvariable variable=runTest]true"
}

enter image description here

然后,在回归测试任务中,您需要设置一个自定义条件,使其仅在runTest变量为true时运行:

and(succeeded(), eq(variables['runTests'], 'true'))

enter image description here

现在,如果批准中写了“运行测试”,则将执行测试:

enter image description here

否则,将跳过测试,但将“成功”发布:

enter image description here

注意:对于PowerShell脚本,您需要允许脚本访问OAuth令牌(选中“代理作业”选项中的复选框):

enter image description here