Azure devops 从Azure管道中运行删除标记

Azure devops 从Azure管道中运行删除标记,azure-devops,tags,azure-pipelines,azure-pipelines-release-pipeline,azure-pipelines-build-task,Azure Devops,Tags,Azure Pipelines,Azure Pipelines Release Pipeline,Azure Pipelines Build Task,我使用构建管道和发布管道来管理AWS基础设施 构建管道对代码运行测试,以确保代码符合某些标准 发布管道启动一个临时环境并运行集成测试 我想配置发布管道,以便在集成测试失败时,它将使用的特定构建标记为失败。因此,如果有人再次触发发布管道,它将使用最新的成功构建,而不是刚刚使用的构建 我试图通过在构建运行状态下向构建运行添加一个标记来实现这一点,如果构建管道测试成功,则添加一个标记;如果构建管道失败,则添加一个标记 然后将发布管道配置为使用最新构建中标记为成功的工件 其意图是,如果发布管道中的集成测

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

构建管道对代码运行测试,以确保代码符合某些标准

发布管道启动一个临时环境并运行集成测试

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

我试图通过在构建运行状态下向构建运行添加一个标记来实现这一点,如果构建管道测试成功,则添加一个标记;如果构建管道失败,则添加一个标记

然后将发布管道配置为使用最新构建中标记为成功的工件

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

但是,我找不到一种方法来自动更改这些标记,作为发布管道的一部分。有办法吗?我是不是从错误的角度来看待这个问题

我有一个构建管道,如果测试通过,则将运行标记为成功;如果测试未通过,则将运行标记为失败

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

如果这些测试失败,我希望管道从获取工件的运行中删除successed标记,并添加失败的标记

我找到的唯一文档是,但这看起来是指不同类型的标记

有没有一种方法可以从发布管道中实现这一点

从Azure管道中运行删除标记

根据关于标签的描述,我假设你提到的标签不应该与本文中提到的标签相同,你提到的是下面的图片吗

如果这是您提到的标签,并希望有一种方法来修改它,需要说对不起,这些标签不能直接用手动更改。管道的状态取决于当前管道结果状态

以发布管道为例:

显示的标记取决于API结果的参数值。并且,它的逻辑用于获取当前版本的deploymentstatus值。然后,将此状态值与CSS/JS文件传递并组合。这是您在UI页面中看到的内容


因此,在独立执行测试之后,无法直接修改管道的标记。作为解决方法,您可以执行构建来触发管道并通过测试结果控制其结果。请参阅此票证示例:

您很接近了。如果要更新构建标记或从发布管道调用REST API,则需要在代理作业中启用“允许脚本访问OAuth令牌”复选框。这将传入一个安全令牌,您可以使用$System.AccessToken引用该令牌

然后,您需要删除成功的标记,然后使用RESTAPI添加失败的标记。还没有用构建标签测试过,但既然已经有文档记录,那么它应该可以工作了。您还可以使用诸如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)" }
你也可以用不同的语言写,但理论应该是一样的


另一个发布变量链接:

只是想澄清一下,您是想标记一个构建还是从发布中更新构建的标记?如果是这样,您应该能够从发布的代理作业中传入允许脚本来访问OAuth令牌,并调用构建API。或者您想更新版本?您的意思是生成标记还是生成状态?谢谢您的评论。我重新措辞了这个问题,以使我的意图更清楚。允许脚本访问OAuth令牌很有趣,并且可能被证明是非常有用的。编辑该标记会很有用,但如果不是那个标记,那也不是世界末日——目前,这些是我正在应用于构建运行的额外标记。但是我想做的是能够从发布管道中更新那些构建-运行标记。您不能直接更新它们,因为它们已根据构建结果修复。您可以做的是读取测试结果,通过在发行版中输出错误/通过消息触发构建失败。我想这就是我想要做的-读取测试结果,并通过在发行版中输出消息将构建设置为失败。我该怎么做?链接中的这个示例能帮助您吗?请随时告诉我它是否可以实现您想要的。问题是它只会将当前构建运行或当前发布运行标记为失败。我想做的是将构建运行标记为失败的发布运行。