azure-devops - 如果手动干预任务被拒绝,是否可以将发布标记为成功?
问题描述
我目前正在尝试为服务结构部署创建一个 azure 发布管道。我的测试环境只有一个阶段,其中包含多个作业/任务。
成功部署到环境后,我们会运行集成测试和冒烟测试。
在冒烟测试之后,我插入了一个手动干预任务,以允许开发人员选择运行回归测试(恢复)或退出流程(拒绝)。如果所有先前的任务(部署、集成和烟雾)都通过并且手动干预被拒绝,我想将发布管道标记为成功。
如果手动干预以resume响应,那么以下任务的结果应该决定发布管道的结果。
我找不到这样的例子,因此感觉方法不正确。是否更适合引入一个中间环境,作为成功的冒烟测试的结果运行回归测试?
解决方案
按照设计,当用户拒绝干预时,发布状态变为“失败”。
我想了一个解决这个问题的方法:
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 令牌(选中代理作业选项中的复选框):
推荐阅读
- php - 如何在 SQLSRV PHP 中使用 foreach/for 循环显示数据库 MSSQL 中的数据
- python - 如何在没有 savetxt() 方法的情况下格式化 np 数组?
- php - 请问我如何从这个php代码中station = e.station的数据库中选择?
- python - 生成其中包含固定代码的 python 文件
- excel - excel用户定义函数的#value错误
- flutter - 从上一页重置动画
- kotlin - Kotlin 抽象类必须有构造函数并被初始化
- google-app-engine - 在 GAE Firestore DatastoreException 中启动查询时出错:找不到匹配的索引
- asp.net - System.Configuration.ConnectionStringSettingsCollection.this[string].get 在类中返回 null
- vuejs2 - [Vue 警告]:尝试使用 vee-validate 时未找到注入“$validator”错误