gpt4 book ai didi

tfs-2015 - TFS2015 REST API 构建定义更新

转载 作者:行者123 更新时间:2023-12-02 14:42:57 24 4
gpt4 key购买 nike

我正在尝试使用 PowerShell 通过 REST API 更新构建定义。

使用的脚本是:

$url = "http://tfs:8080/tfs/collection/project/_apis/build/definitions/$($buildId)?api-version=2.0"
$obj = Invoke-RestMethod -Uri $url2 -Method Get -ContentType "application/json" -UseDefaultCredentials
$json = ConvertTo-Json $obj
Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -UseDefaultCredentials

首先,我尝试使用新的空定义,但出现以下错误:

The collection must contain at least one element.Parameter name: definition.Options.Inputs

所以我添加了一个额外的代码来从返回的 json 中删除“选项”部分:

if($obj.options -ne $null){
$obj.options = $null }

更新成功了。但是,当我在生产中的“真实”现有构建定义上使用代码时,我收到另一个错误:

The collection must contain at least one element. Parameter name: definition.RetentionRules.Rule.Branches.Filter

我正在使用 TFS2015 更新 3。

为什么不通过 REST API 对构建定义进行简单更新(不进行任何修改)?

最佳答案

需要更改 $json = ConvertTo-Json $obj 行以包含最小值为 3-Depth 参数。默认值为 2,并且由于嵌套,从对象转换为 Json 时,值会丢失。更具体地说,发生的情况是将值从数组转换为简单的字符串。

如何判断 Json 中是否发生了这种情况

没有深度参数

"retentionRules":  [
{
"branches": "+refs/heads/*",
"artifacts": "build.SourceLabel",
"daysToKeep": 10,
"minimumToKeep": 1,
"deleteBuildRecord": true,
"deleteTestResults": true
}
]

带有深度参数

"retentionRules":  [
{
"branches": [
"+refs/heads/*"
],
"artifacts": [
"build.SourceLabel"
],
"daysToKeep": 10,
"minimumToKeep": 1,
"deleteBuildRecord": true,
"deleteTestResults": true
}
]

您将看到 branchesartifacts 值从字符串更改为具有适当深度值的数组。

您的示例代码应该是什么

$url = "http://tfs:8080/tfs/collection/project/_apis/build/definitions/$($buildId)?api-version=2.0"
$obj = Invoke-RestMethod -Uri $url2 -Method Get -ContentType "application/json" -UseDefaultCredentials
$json = ConvertTo-Json $obj -Depth 3
Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -UseDefaultCredentials

关于tfs-2015 - TFS2015 REST API 构建定义更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38378702/

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