ds1*_*s19 3 tfs-sdk tfs-2015 azure-devops-rest-api
我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)
首先,我尝试了一个新的空定义,我得到以下错误:
该集合必须至少包含一个元素.参数名称:definition.Options.Inputs
所以我添加了一个额外的代码来从返回的json中删除"options"部分:
if($obj.options -ne $null){
$obj.options = $null }
Run Code Online (Sandbox Code Playgroud)
并且更新有效.但是,当我在生产中的"真实"现有构建定义上使用代码时,我得到另一个错误:
该集合必须至少包含一个元素.参数名称:definition.RetentionRules.Rule.Branches.Filter
我正在使用TFS2015 Update 3.
为什么不通过REST API对构建定义进行简单的更新(不做任何修改)?
该行$json = ConvertTo-Json $obj需要更改为包含-Depth最小值为的参数3.默认值为2,由于嵌套,当从对象转换为Json时,值将丢失.更具体地说,将值从数组转换为简单字符串.
"retentionRules": [
{
"branches": "+refs/heads/*",
"artifacts": "build.SourceLabel",
"daysToKeep": 10,
"minimumToKeep": 1,
"deleteBuildRecord": true,
"deleteTestResults": true
}
]
Run Code Online (Sandbox Code Playgroud)
"retentionRules": [
{
"branches": [
"+refs/heads/*"
],
"artifacts": [
"build.SourceLabel"
],
"daysToKeep": 10,
"minimumToKeep": 1,
"deleteBuildRecord": true,
"deleteTestResults": true
}
]
Run Code Online (Sandbox Code Playgroud)
您将看到branches和artifacts值从字符串更改为具有适当深度值的数组.
$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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1012 次 |
| 最近记录: |