0

我正在使用 Visual Studio Online rest api,并尝试更新现有的构建定义

因此,根据以下文档: https ://www.visualstudio.com/en-us/integrate/api/build/definitions#Updateabuilddefinition

它说您可以更新现有的构建定义。

因此,我将以下 JSON 提供给帖子:

    { 
      id: 43,
      name: 'Test Build',
      revision: 10,
      variables: { 
        version: { value: '20', allowOverride: true } 
      },
      comment: 'New version added: 20' 
    }

所以 id 和 revision 与现有的构建定义相同。

它失败并出现以下错误:

    {
        "$id":"1",
        "innerException":null,
        "message":"Build definition Test Build already exists for project TestProject.",
        "typeName":"Microsoft.TeamFoundation.Build.WebApi.DefinitionExistsException, Microsoft.TeamFoundation.Build2.WebApi, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
        "typeKey":"DefinitionExistsException",
        "errorCode":0,
        "eventId":3000
    }

任何想法我做错了什么?

4

2 回答 2

1

如果您看到错误“消息=项目 MyProj 的构建定义测试构建已存在。” 可能是您的 powershell 有“-Method Post”,它应该有“-Method PUT”

于 2016-02-19T21:58:18.437 回答
0

提琴手来救援!

我试图做的是触发一个带有变量的构建。先前关于此的问题指出唯一的方法是更新构建定义。

你不必。当您对构建进行排队时,您可以为构建定义中的变量发送值。

因此,使用 API 对构建进行排队: https ://www.visualstudio.com/en-us/integrate/api/build/builds#Queueabuild

将以下内容发送到帖子的正文中:

    { 
        queue: { id: 5 },
        definition: { id: 43 },
        project: { id: 'aaa12345-a1b2-1a23-123a-1234a56789ab' },
        parameters: '{"version":"20"}',
        reason: 1,
        demands: [] 
    }

请注意以下事项:

  1. 它被称为参数,而不是变量;
  2. 它是传入的字符串,而不是 json 元素。所以在我的nodejs中它被模拟为:

    parameters:"{\"version\":\"" + version + "\"}"
    

现在您可以对构建进行排队,并通过 API 为您的变量提供值

于 2016-02-05T13:22:58.183 回答