gpt4 book ai didi

rest - VSTS REST API - 更新版本

转载 作者:行者123 更新时间:2023-12-02 22:45:58 25 4
gpt4 key购买 nike

我正在尝试使用记录在案的 REST API 自动标记 VSTS 版本 here ,使用 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: The ID of the release does not match the ID of the original release resource. Ensure that you are trying to update the correct resource."

如果我尝试添加 ID 来匹配,它说我需要一个名字,如果我添加一个名字,我会得到一个错误

"VS402886: Adding or deleting environments from the release is not allowed."

所以它似乎需要在正文中提供所有发布信息才能工作..?因此,我改为尝试将信息添加到我从 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: Artifact source with alias: 'build alias' has been modified. Field changed: 'DefinitionReference'"

然后我尝试从 $body 中删除 Artifacts 属性,我得到另一个错误:

"VS402885: Adding or deleting artifacts from the release is not allowed."

我刚刚注意到 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: Artifact source with alias: 'build alias' has been modified. Field changed: 'DefinitionReference'"* and *"VS402885: Adding or deleting artifacts from the release is not allowed."

知道我在这里做错了什么吗?看起来它应该对我有用,我能够在 VSTS 中对构建执行类似的操作,并且它正确地更新了一些属性——只是不是标签!我可以通过浏览器手动添加标签,而不是通过 API。

最佳答案

看起来发布的标签 API 只是针对发布的标签属性发布了一个 PATCH。从 UI 中捕获:

Invoke-WebRequest 
-Uri "https://{account}.vsrm.visualstudio.com/{team-project}/_apis/Release/releases/{id}/tags/{tagname}"
-Method "PATCH"
-Headers
@{
"X-TFS-FedAuthRedirect"="Suppress";
"Origin"="https://{account}.visualstudio.com";
"X-VSS-ReauthenticationAction"="Suppress";
"Accept-Encoding"="gzip, deflate, br";
"Accept-Language"="nl,en-US;q=0.9,en;q=0.8,nl-NL;q=0.7";
"Accept"="application/json;api-version=5.0-preview.1;excludeUrls=true";
}
-ContentType "application/json"

关于rest - VSTS REST API - 更新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51928129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com