我们正在尝试通过使用Azure Devops Rest API复制另一个构建定义信息来创建构建定义,但是出现以下错误:
HttpError BadRequest-值不能为null。参数名称: 定义。Repository.Mappings.Mapping.ServerPath。
这是我们要执行的步骤
示例代码
var buildDefinitionGet = client.GetBuildDefinitionsAsync("XXX.DevOps", "15");
var newBuildDefinition = buildDefinitionGet;
newBuildDefinition.name = "MVC2017-1";
var buildDefinition = await client
.CreateBuildDefinitionsAsync("XXX.DevOps", newBuildDefinition)
.ConfigureAwait(false);
这是请求正文结构:
public class BuildDefinitionRequestBody
{
public Process process { get; set; }
public Repository repository { get; set; }
public ProcessParameters processParameters { get; set; }
public List<object> drafts { get; set; }
public Queue queue { get; set; }
public string name { get; set; }
public string type { get; set; }
public string queueStatus { get; set; }
}
我们正在使用TFVC作为源代码控制。
我们有什么遗漏吗?
答案 0 :(得分:0)
在这些情况下,有两种类型的错误
“ definition.Repository.Mappings.Mapping.ServerPath ”和“ definition.Repository.Mappings.Mapping.LocalPath”。
以下情况会导致上述错误。
definition.Repository.Mappings.Mapping.LocalPath :
definition.Repository.Mappings.Mapping.ServerPath :
由于屏幕截图无法显示完整的本地路径和服务器路径,因此请根据上述规则检查路径。而且我建议您从页面顶部相应项目的“代码”->“文件”中复制“服务器路径”值,以确保服务器路径正确。对于本地路径,建议您一一删除,以确保引起此问题的路径是
。用于克隆构建的Powershell等效代码。
$uri = 'https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}'
$result = Invoke-RestMethod -Method Get -Uri $uri -UseDefaultCredentials
$result.path = '\NewFolder\Location'
$result.name = "Testing"
$body = $result | ConvertTo-Json -Depth 7
Invoke-RestMethod -Method POST -uri 'https://dev.azure.com/{organization}/{project}/_apis/build/definitions?api-version=4.0' -UseDefaultCredentials -Body $body -ContentType 'application/json'
希望有帮助。