首页 > 解决方案 > 如果手动干预任务被拒绝,是否可以将发布标记为成功?

问题描述

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

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

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

如果手动干预以resume响应,那么以下任务的结果应该决定发布管道的结果。

我找不到这样的例子,因此感觉方法不正确。是否更适合引入一个中间环境,作为成功的冒烟测试的结果运行回归测试?

标签: azure-devopsazure-pipelines

解决方案


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

我想了一个解决这个问题的方法:

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

2) 在它之后,在回归测试之前添加一个 PowerShell 任务来检查之前的评论,如果评论是“运行测试”,则设置一个值为“true”的新变量。

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

例如,如果批准通过“运行测试”恢复干预,则将执行回归测试。所以你需要一个 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"
}

在此处输入图像描述

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

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

在此处输入图像描述

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

在此处输入图像描述

如果没有,测试将被跳过,但发布将“成功”:

在此处输入图像描述

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

在此处输入图像描述


推荐阅读