从 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
我正在使用构建管道和发布管道来管理 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