从 Azure Pipelines 中的 运行 中删除标签

Remove tag from run in Azure Pipelines

我正在使用构建管道和发布管道来管理 AWS 基础设施。

构建管道 运行 对代码进行测试以确保代码符合特定标准。

发布管道启动临时环境和 运行s 集成测试。

我想配置发布管道,以便在集成测试失败时将其使用的特定构建标记为失败。这样,如果有人再次触发发布管道,它将使用最近的成功构建,而不是刚刚使用的构建。

我试图通过在构建 运行 状态下向构建 运行 添加标记来实现此目的,如果构建管道测试,则为 "succeeded" 或 [=39] =] 如果构建管道失败。

然后将发布管道配置为使用标记为 "succeeded" 的最新版本中的工件。

目的是如果发布管道中的集成测试失败,有一个步骤会从该构建 运行 中删除 "succeeded" 标记并将其替换为 "failed" .

但是,我找不到在发布管道中自动更改这些标签的方法。有办法吗?我是不是从错误的角度来看待这个问题?

我有一个构建管道,如果测试通过则将 运行 标记为 "succeeded",如果测试未通过则标记为 "failed"。

如果构建成功,发布管道启动一些基础设施,部署构建,然后 运行s 集成测试。

如果这些测试失败,我希望管道从它从中获取工件的 运行 中删除 "succeeded" 标记,并添加一个 "failed" 标记。

我找到的唯一文档是 here,但这似乎指的是不同类型的标签。

有没有办法从发布管道做到这一点?

Remove tag from run in Azure Pipelines

根据关于Tag的描述,我假设你提到的Tag应该和这个[=]中提到的不一样11=],你说的是不是像下图这样的?

如果是你说的"tag"想办法修改,需要说声抱歉,这些"tags"不能直接用手动修改.流水线的状态取决于当前流水线的结果状态。


以发布管道为例:

显示的"tag"依赖参数DeploymentStatus value of API result. And also, the logic of it is use API获取当前版本的deploymentstatus值。然后,将此状态值传递并与 CSS/JS 文件合并。这是您在 UI 页面上看到的内容。

所以,pipeline的"tags"不能在测试独立执行后直接修改。作为解决方法,您可以执行构建以触发管道并通过测试结果控制其结果。请参阅此票证示例:

你很接近。如果您想从发布管道更新构建标记(或一般调用 REST API),您需要在代理作业中启用 "Allow scripts to access OAuth token" 复选框。 (https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=classic) 这将传递一个安全令牌,您可以使用 $System.AccessToken.

引用该令牌

然后,您需要删除成功的标签,然后使用 REST API 添加失败的标签。尚未使用构建标签对此进行测试,但由于已对其进行记录,因此它应该可以工作。您也可以使用 Postman 之类的工具和 PAT 来手动测试它。

可能类似于(在 PowerShell 中):

$accessToken = $env:SYSTEM_ACCESSTOKEN

# Get the build ID for the artifact, note that you need the alias already

$buildId = $env:RELEASE_ARTIFACTS_{alias}_BUILDID

$deleteSucceededTagUri = "https://dev.azure.com/{organization}/{project}/_apis/build/builds/$($buildId)/tags/succeeded?api-version=5.1"

# Delete the succeeded tag
$response = Invoke-RestMethod -Method DELETE -Uri $deleteSucceededTagUri -Headers @{ Authorization = "Bearer $($accessToken)" }

$addFailedTagUri = "https://dev.azure.com/{organization}/{project}/_apis/build/builds/$($buildId)/tags/failed?api-version=5.1"

# Add the failed tag
$response = Invoke-RestMethod -Method PUT -Uri $addFailedTagUri -Headers @{ Authorization = "Bearer $($accessToken)" }

你也可以用不同的语言来写,但理论应该是一样的。

还有 link 发布变量:https://docs.microsoft.com/en-us/azure/devops/pipelines/release/variables?view=azure-devops&tabs=batch