我们尝试使用Azure Devops Rest API复制另一个构建定义信息来创建构建定义,但是得到以下错误:
HttpError BadRequest - 值不能为null。参数名称:definition.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作为源控件。
我们错过了什么吗?
在这些情况下,有两种类型错误,
“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'
希望能帮助到你。