【问题标题】:Remove tag from run in Azure Pipelines从 Azure Pipelines 中的运行中删除标记
【发布时间】:2019-09-05 21:52:34
【问题描述】:

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

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

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

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

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

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

其目的是如果发布管道中的集成测试失败,有一个步骤会从构建运行中删除“成功”标签并将其替换为“失败”。

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

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

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

如果这些测试失败,我希望管道从它获取工件的运行中删除“成功”标签,并添加一个“失败”标签。

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

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

【问题讨论】:

  • 澄清一下,您是要标记构建还是从发布更新构建的标签?如果是这样,您应该能够从发布的代理作业中传入“允许脚本访问 OAuth 令牌”并调用构建 API。还是要更新版本?
  • 你的意思是构建标签还是构建状态?
  • 感谢您的 cmets。我已经改写了这个问题,以使我的意图更清楚。 “允许脚本访问 OAuth 令牌”很有趣,可能会非常有用。

标签: azure-devops tags azure-pipelines azure-pipelines-release-pipeline azure-pipelines-build-task


【解决方案1】:

你已经接近了。如果您想从发布管道更新构建标签(或通常调用 REST API),您需要在代理作业中启用“允许脚本访问 OAuth 令牌”复选框。 (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)" }

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

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

【讨论】:

    【解决方案2】:

    从 Azure Pipelines 中的运行中删除标记​​p>

    根据关于Tag的描述,我认为你提到的Tag应该与doc中提到的不一样,你提到的就像如下图?

    如果这是您提到的“标签”,并且想要修改它,需要说对不起,这些“标签”无法直接手动更改。取决于当前管道结果状态的是管道的状态。


    以发布管道为例:

    显示的“标签”取决于API结果的参数DeploymentStatus值。而且,它的逻辑是使用API 来获取当前版本的部署状态值。然后,传递此状态值并将其与 CSS/JS 文件组合。这是您从 UI 页面看到的。

    因此,管道的“标签”不能在独立执行测试后直接修改。作为解决方法,您可以执行构建以触发管道并通过测试结果控制其结果。请参阅此票证示例:how to fail build when published Tests fail

    【讨论】:

    • 编辑那个“标签”会很有用,但如果不是那个,那也不是世界末日——目前这些是我正在应用到构建运行的额外标签。但我想做的是能够从发布管道更新那些构建运行标签。
    • 您无法直接更新它们,因为它们已被修复取决于构建结果。您可以做的是通过在发布中输出错误/通过消息来读取测试结果触发构建失败。
    • 我认为这就是我想要做的 - 阅读测试结果并通过在发布中输出一条消息将构建设置为失败。我该怎么做?
    • 链接中的这个示例:stackoverflow.com/questions/44842693/… 对您有帮助吗?随时让我知道它是否可以实现您想要的。
    • 问题在于它只会将当前构建运行或当前发布运行标记为失败。我要做的是将构建运行标记为失败的发布运行失败​​。
    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 2012-11-21
    • 1970-01-01
    相关资源
    最近更新 更多