【问题标题】:Create Build Definition using Azure Devops API使用 Azure Devops API 创建生成定义
【发布时间】:2019-07-21 01:25:09
【问题描述】:

我们正在尝试通过使用 Azure Devops Rest API 复制另一个构建定义信息来创建构建定义,但出现以下错误:

HttpError BadRequest - 值不能为空。参数名称: 定义.Repository.Mappings.Mapping.ServerPath。

这是我们正在遵循的步骤

  1. 使用 API 获取构建信息 - 此步骤运行良好
  2. 修改构建定义的名称
  3. 通过传递上述构建定义请求正文创建新的构建定义

示例代码

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传递了什么值?
  • 嗨 Stuart,在 Repository 中,我们不需要根据链接 docs.microsoft.com/en-us/rest/api/azure/devops/build/… 为 Mappings 部分提供任何内容
  • 另外,如果我们在 definition.Repository.Mappings.Mapping.ServerPath 中添加“$/XXX.ExtSource/MVC2017”,那么我们也会遇到同样的错误

标签: c# azure-devops azure-devops-rest-api


【解决方案1】:

在这些场景中,有两种类型的错误,

definition.Repository.Mappings.Mapping.ServerPath”和“definition.Repository.Mappings.Mapping.LocalPath”。

您路径中的以下情况将导致上述错误。

definition.Repository.Mappings.Mapping.LocalPath


  1. unc 路径不允许
  2. 本地映射不允许是绝对路径或导航到 s 目录外
  3. 两个映射不应具有相同的本地路径
  4. 本地路径号为0或映射号为0

definition.Repository.Mappings.Mapping.ServerPath


  1. 不允许使用无效字符
  2. 服务器路径或类型不允许有空字段
  3. 两个映射不应具有相同的服务器路径

由于截图没有显示完整的本地路径和服务器路径,请根据上述规则检查路径。我建议你从页面顶部相应项目的代码 -> 文件中复制服务器路径值,这可以确保服务器路径正确。对于本地路径,我建议你一个一个删除,以确定是哪一个导致了这个问题。

用于克隆构建的 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'

希望对你有帮助。

【讨论】:

  • 嗨 Mohit,在下面来自 azure devops doc docs.microsoft.com/en-us/rest/api/azure/devops/build/… 的链接中,如果您检查存储库部分,则没有任何关于 Mappings.Mapping.LocalPath 和 Mappings.Mapping.ServerPath 的内容,我们需要在其中放置这些值。如果我们在存储库部分添加它并设置值,那么它也会给出相同的错误。您能否为我们提供一些使用 C#、Azure dev ops API for TfsVersionControl 创建构建定义的工作示例代码。我们没有使用 git。
  • 尝试在“neBuildDefinition.Path”中给出一些值。然后尝试运行您的代码。我在我的答案中添加了用于克隆构建定义的等效电源外壳代码。
  • 在发布之前,我已经在 powershell 中尝试过,它对我有用,你能看看你是否能够使用 powershell 代码克隆它。
  • 另外,您似乎已经传递了一个解决方案路径,请尝试提供一个文件夹名称的相对路径,如“\newfolder\”,并在 buildnumberformat 中传递一个值。您可以参考下面的线程。 stackoverflow.com/questions/54524295/…
  • 嗨 Mohit,我试图在 powershell 中运行它但是得到以下错误在这个对象上找不到属性“路径”。验证该属性是否存在并且可以设置。在 line:4 char:1 + $result.path = '\XXX.DevOps' 也是当我从 C# 和 Azure devops api 运行它并设置路径 = "\XXX.DevOps" 和 buildnumberformat =“$(date: yyyyMMdd)$(rev:.r)" 得到相同的 expeption HttpError BadRequest - 值不能为空。参数名称:definition.Repository.Mappings.Mapping.ServerPath.
猜你喜欢
  • 2020-01-21
  • 2019-11-13
  • 2019-08-24
  • 2020-05-23
  • 2020-09-27
  • 2021-08-12
  • 2021-02-09
  • 2019-08-28
  • 1970-01-01
相关资源
最近更新 更多