【问题标题】:VSTS REST API - Updating a releaseVSTS REST API - 更新版本
【发布时间】: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


    【解决方案1】:

    看起来发布的标签 API 只是针对发布的标签属性发出补丁。从用户界面捕获:

    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"
    

    【讨论】:

    • 对 - 它看起来与文档中提到的 URI 不同,这个看起来像是专门用于标签的,而另一个只是用于更一般地更新版本。我会试试这个 - 谢谢!
    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多