【发布时间】:2023-04-04 05:09:01
【问题描述】:
我正在尝试自动标记 VSTS 版本,使用记录在 here 的 REST API,使用 PowerShell,似乎无法使用 API 添加/编辑发布标签。
我可以使用GET 发布 OK:
$release = Invoke-RestMethod -Method GET -Uri $releaseUri -Headers $headers
但是当我尝试更新版本时,我要么得到一个错误,要么标签保持不变。我试图将发布设置为保留,并用语义版本号标记,所以首先我尝试了,正如文档所说,一个 PUT 请求:
$body = ConvertTo-Json @{ keepForever = "true"; tags = @($semanticVersion)}
Invoke-RestMethod -Method PUT -Uri $releaseUri -Headers $headers -ContentType "application/json" -Body $body
这给出了一个错误:
"VS402892:发布的ID与原版的ID不匹配 释放资源。确保您尝试更新正确的 资源。”
如果我尝试添加要匹配的 ID,它会说我需要一个名称,如果我添加一个名称,我会收到错误
“VS402886:在发行版中添加或删除环境不是 允许。”
所以看起来它需要在正文中提供所有发布信息才能工作..?所以我改为尝试将信息添加到我从 GET 请求中获得的发布信息中:
$release = Invoke-RestMethod -Method GET -Uri $releaseUri -Headers $headers
$release.tags += "$semanticVersion"
$release.keepForever = "True"
$body = ConvertTo-Json $release
Invoke-RestMethod -Method PUT -Uri $releaseUri -Headers $headers -ContentType "application/json" -Body $body
这给出了错误:
“VS402897:具有别名的工件源:'build alias'已被 修改的。字段已更改:'DefinitionReference'"
然后,我尝试从 $body 中删除 Artifacts 属性,但又遇到另一个错误:
“VS402885:从发布中添加或删除工件不是 允许。”
我刚刚注意到 DefinitionReference 属性中没有任何信息 - 这可能是导致错误的原因吗? 为什么当我 GET 获得发布时不会返回?
因此,此时 PUT 请求似乎不会执行此操作,因此我尝试使用 PATCH 代替。这似乎效果更好 - 我没有收到以下任何错误:
$body = ConvertTo-Json @{ keepForever = "true"; tags = @($semanticVersion)}
Invoke-RestMethod -Method PATCH -Uri $releaseUri -Headers $headers -ContentType "application/json" -Body $body
这会正确更新“keepForever”属性,但标签保持不变。我还尝试再次使用 GET 获取完整的发布信息,并添加标签,但我仍然得到相同的东西,它更新了 keepForever 信息,而不是标签。
我也尝试过使用 POST,但我再次遇到与使用 PUT 相同的错误:
“VS402897:具有别名的工件源:'build alias'已被 修改的。字段更改:'DefinitionReference'"* 和 *"VS402885: 不允许在版本中添加或删除工件。”
任何想法我在这里做错了什么?看起来它应该对我有用,而且我能够对 VSTS 中的构建执行类似的操作,并且它正确更新了一些属性 - 只是不是标签!我可以通过浏览器手动添加标签,而不是通过 API。
【问题讨论】:
标签: rest powershell azure-devops