VSO更新构建定义 - 已存在

时间:2016-02-05 10:52:49

标签: azure-pipelines azure-devops-rest-api

我正在使用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
    }

任何想法我做错了什么?

2 个答案:

答案 0 :(得分: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 + "\"}"
    
  3. 现在您可以对构建进行排队,并通过API为变量提供值

答案 1 :(得分:0)

如果您看到错误' message =构建定义,则项目MyProj已存在TestingBuild。'可能是你的powershell有' -Method Post'应该在哪里使用' -Method PUT'