【问题标题】:TFS REST Api Update Build Definition Or Pass Variable While Queuing the Build C#TFS REST Api 更新构建定义或在排队构建 C# 时传递变量
【发布时间】:2016-09-18 00:07:11
【问题描述】:

我在尝试通过使用 C# 编写的控制台应用程序更新 TFS 中现有的构建定义时遇到了问题。我正在成功排队构建,但我传入的参数并未应用于构建中,如我所见。我试图在触发它之前更新定义,但我也收到了关于它的错误请求。哪种方法更好,如果有人在我之前这样做过,我会寻求帮助。我唯一需要的是传递一些参数。我也不喜欢传递字符串。谢谢:)

我正在关注 TFS REST Api 文档 -> https://www.visualstudio.com/en-us/integrate/api/build/definition-templates

【问题讨论】:

  • 您是如何使用 REST API 的?
  • 你能分享有问题的代码部分吗?

标签: c# api rest tfs build


【解决方案1】:

你可以试试这个。 Customize your build process on fly

$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=2.0"

$definition = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -Method Get -ContentType application/json
Write-Host "Befor json = $($definition | ConvertTo-Json -Depth 100)" 

    $definition.build[1].enabled = "True"   
    $definition.build[1].inputs.msbuildArgs = "\OutPath bla-bla-bla"

    $Updatedefinition = Invoke-RestMethod -uri $url -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -Method PUT -Body (Convertto-Json  $Updatedefinition  -Depth 100) -ContentType "application/json"

Write-Host "After json = $($Updatedefinition | ConvertTo-Json -Depth 100)" 

【讨论】:

    【解决方案2】:

    Bad Request 意味着您的语法错误。 Update a build definition 的语法应该是这样的:

    PUT https://{instance}/defaultcollection/{project}/_apis/build/definitions/{definitionid}?api-version={version}
    

    您可以参考示例请求编写自己的语法:

    PUT https://fabrikam.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/build/definitions/29?api-version=2.0
    Content-Type: application/json
    {
      "id": 29,
      "revision": 1,
      "name": "myFavoriteDefinition",
      "definitionType": "build",
      "documentQuality": "definition",
      "queue": {
        "id": 1
      },
      "build": [
        {
          "enabled": true,
          "continueOnError": false,
          "alwaysRun": false,
          "displayName": "Build solution **\\*.sln",
          "task": {
            "id": "71a9a2d3-a98a-4caa-96ab-affca411ecda",
            "versionSpec": "*"
          },
          "inputs": {
            "solution": "**\\*.sln",
            "msbuildArgs": "",
            "platform": "$(platform)",
            "configuration": "$(config)",
            "clean": "false",
            "restoreNugetPackages": "true",
            "vsLocationMethod": "version",
            "vsVersion": "latest",
            "vsLocation": "",
            "msbuildLocationMethod": "version",
            "msbuildVersion": "latest",
            "msbuildArchitecture": "x86",
            "msbuildLocation": "",
            "logProjectEvents": "true"
          }
        },
        {
          "enabled": true,
          "continueOnError": false,
          "alwaysRun": false,
          "displayName": "Test Assemblies **\\*test*.dll;-:**\\obj\\**",
          "task": {
            "id": "ef087383-ee5e-42c7-9a53-ab56c98420f9",
            "versionSpec": "*"
          },
          "inputs": {
            "testAssembly": "**\\*test*.dll;-:**\\obj\\**",
            "testFiltercriteria": "",
            "runSettingsFile": "",
            "codeCoverageEnabled": "true",
            "otherConsoleOptions": "",
            "vsTestVersion": "14.0",
            "pathtoCustomTestAdapters": ""
          }
        }
      ],
      "repository": {
        "id": "278d5cd2-584d-4b63-824a-2ba458937249",
        "type": "tfsgit",
        "name": "Fabrikam-Fiber-Git",
        "localPath": "$(sys.sourceFolder)/MyGitProject",
        "defaultBranch": "refs/heads/master",
        "url": "https://fabrikam.visualstudio.com/DefaultCollection/_git/Fabrikam-Fiber-Git",
        "clean": "false"
      },
      "options": [
        {
          "enabled": true,
          "definition": {
            "id": "7c555368-ca64-4199-add6-9ebaf0b0137d"
          },
          "inputs": {
            "parallel": "false",
            "multipliers": "[\"config\",\"platform\"]"
          }
        }
      ],
      "variables": {
        "forceClean": {
          "value": "false",
          "allowOverride": true
        },
        "config": {
          "value": "debug, release",
          "allowOverride": true
        },
        "platform": {
          "value": "any cpu",
          "allowOverride": true
        }
      },
      "triggers": [],
      "comment": "renamed"
    }
    

    【讨论】:

    • 是的,但我只想更新某些属性 - 在上面的请求中,我想更新变量 {} 。我不想知道任何其他信息或将所有数据发送到 TFS 服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 2018-03-06
    • 2018-02-12
    • 2013-01-01
    • 1970-01-01
    • 2018-05-01
    相关资源
    最近更新 更多