【问题标题】:Error resetting retainedByRelease property of a build in build pipeline through PowerShell通过 PowerShell 重置构建管道中的 reservedByRelease 属性时出错
【发布时间】:2019-07-22 13:26:51
【问题描述】:

我正在尝试通过 PowerShell 调用 Azure Rest API 在我的构建管道之一中设置构建的 reservedByRelease 属性的值。我在终端中收到“找不到页面”错误。我怀疑我准备的 URL 错误,但不确定在哪里。请帮忙。

为了找出 URL,我从下面的 Build 链接中获取了区域 ID(即 5d6898bb-45ec-463f-95f9-54d49c71752e)。 https://docs.microsoft.com/en-us/azure/devops/extend/develop/work-with-urls?view=azure-devops&tabs=http#resource-area-ids-reference

从 VSO 获得个性化令牌。

下面是脚本的样子(屏蔽了令牌和构建 ID):

$orgURL = "https://dev.azure.com"

$personalToken = "*******"

$token = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($personalToken)"))
$header = @{authorization="Bearer $token"}

$areaId = "5d6898bb-45ec-463f-95f9-54d49c71752e"

$orgResourceAreasUrl = [string]::Format("{0}/_apis/resourceAreas/{1}?api-version=5.0-preview.1",$orgURL,$areaId)

$results = Invoke-RestMethod -Uri $orgResourceAreasUrl -Headers $header

$basrUrl = $results.locationUrl
Invoke-RestMethod -Uri ($basrUrl + '_apis/build/builds/<someBuildId>?api-version=3.2') -Method Patch -Body (ConvertTo-Json @{"retainedByRelease"='false'}) -Headers $header -ContentType "application/json" | Out-Null

我在Invoke-RestMethod 通话的最后一行收到错误消息。

我正在尝试这样做,因为下面的构建管道引发了一些合规性错误,我需要删除该管道,但我无法删除它,因为此构建被发布保留。

P.S,我已经检查了以下链接。 https://developercommunity.visualstudio.com/content/problem/442784/one-or-more-builds-associated-with-the-requested-p.html - 看起来永久修复还没有到位 https://almguide.net/2018/12/13/build-blocked-by-release/

【问题讨论】:

标签: azure-devops azure-devops-rest-api


【解决方案1】:

-Uri ($basrUrl + 'https://tfsprodea1.visualstudio.com/')

这个错误的url 构造导致的错误。你可以使用Write-Host $orgResourceAreasUrl打印出你之前构建的url,你会看到$results.locationUrl的值是https://tfsprodea1.visualstudio.com/而不是https://dev.azure.com/{your org name}/。所以,实际上,在脚本的最后一行,你构造的 url 的值为https://tfsprodea1.visualstudio.com/_apis/build/builds/&lt;someBuildId&gt;?api-version=3.2。这不是 Azure Devops 可以识别的正确 url。正确的网址应该是https://dev.azure.com/{org name}/_apis/build/builds/{build id}?api-version=3.2

此错误的根本原因是您为 orgURL 指定的值不正确。为了更正您收到的错误,您应该更改$orgURL 的值并指定如下所示:

$orgURL = "https://dev.azure.com/{your org name}"

只有这样,才能得到locationUrl的正确值。

另外,在脚本那一行,你构造的url是

https://dev.azure.com/{org name}/_apis/build/builds/{build id}?api-version=3.2

这是一个组织级别的定义消息,你不能用令牌UPDATE它。或者您将收到消息 ID 为“未指定项目”的项目。不存在,或者您没有访问权限。.

如果你还想更新retainedByRelease的值,请将url构造成

 https://dev.azure.com/{org name}/{project name}/_apis/build/builds/{build id}?api-version=3.2

这是一个项目级别的信息,可以用令牌更新。

所以,根据你的脚本,我做了一些改变:

[String]$project = "$env:SYSTEM_TEAMPROJECT"
$orgURL = "https://dev.azure.com/{your org name}"
$header = @{   
 Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
$areaId = "5d6898bb-45ec-463f-95f9-54d49c71752e"
$orgResourceAreasUrl = [string]::Format("{0}/_apis/resourceAreas/{1}?api-version=5.0-preview.1",$orgURL ,$areaId)

$results = Invoke-RestMethod -Uri $orgResourceAreasUrl -Headers $header
$basrUrl = $results.locationUrl

Invoke-RestMethod -Uri ($basrUrl + $project + '/_apis/build/builds/{build id }?api-version=3.2') -Method Patch -Body (ConvertTo-Json @{"retainedByRelease"='false'}) -Headers $header -ContentType "application/json" | Out-Null

注意:首先启用下面的复选框,以便您可以在脚本中使用System.AccessToken

【讨论】:

  • 感谢您的回复。即使在您的脚本中替换了 Org Name 和 build id 之后,我也会遇到同样的错误。我已将第一行中的预定义变量替换为项目的实际名称,因为“$env:SYSTEM_TEAMPROJECT”没有返回任何内容。
  • P.S.我已选中复选框以允许在构建管道中使用 OAUTH 令牌
  • @soumyadebghoshal 已经连线了,这些脚本可以成功替换RetainedByRelease的值。
  • @soumyadebghoshal 你是说“env:SYSTEM_TEAMPROJECT””中没有返回值吗?
  • 是的,它是一个空字符串。让我知道是否可以为您提供有关我正在运行的脚本的更多详细信息。
猜你喜欢
  • 1970-01-01
  • 2018-10-31
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 2021-11-27
  • 2023-03-17
相关资源
最近更新 更多