【问题标题】:How to clone a build definition Visual Studio Online如何克隆生成定义 Visual Studio Online
【发布时间】:2018-01-26 01:22:33
【问题描述】:

我正在使用带有链接到 Visual Studio Online 的团队资源管理器的 VS 2013。

我有“发布”构建定义,我想将其复制/克隆到“调试”构建的新定义。

团队资源管理器似乎没有给我这个选项:-(

我尝试使用“社区 TFS 构建管理器”来克隆构建定义,但似乎不允许这样做,因为它需要克隆到不同的项目。

我尝试使用 TFS Power tools TFPT powershell 命令,但它总是给我一个错误“无法确定源代码控制服务器”。

创建构建定义副本的推荐方法是什么?

【问题讨论】:

    标签: azure-devops


    【解决方案1】:

    转到团队资源管理器。

    选择您要克隆的特定构建。

    右键单击 -> 克隆构建定义。

    通过这种方式,您可以克隆保存在同一个项目下的构建定义:

    [您选择的构建定义]的副本

    【讨论】:

    • 您还需要管理构建权限权限。
    【解决方案2】:

    在 Visual Studio Team Services 中,您可以通过浏览到“构建和发布”->“构建”->“构建定义”来克隆构建,将鼠标悬停在构建定义上进行克隆,然后单击出现的省略号按钮从上下文菜单中选择“克隆”:

    【讨论】:

      【解决方案3】:

      如果您希望使用 Powershell 自动克隆 VSTS 中的构建,您可以使用以下脚本(根据 documentation 编写)。

      您将需要更改: $buildToCloneName$newBuildName$user$accessToken$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI$env:SYSTEM_TEAMPROJECTID让它为您工作。

      $env:SYSTEM_TEAMPROJECTID 是构建所在的团队项目。

      Powershell 脚本:

      Clear-Host
      $buildToCloneName = "Build 1"
      $newBuildName = "Build 1 - Clone"
      
      
      $user = "myname@mycompany.com"
      $accessToken="4df31252fqt...PAT...."
      $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$accessToken)))
      $env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI = "https://mycompany.visualstudio.com/"
      $env:SYSTEM_TEAMPROJECTID = "MyProject"
      
      "Getting all bulid definitions"
      $allSuitesBuildUrl = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$($env:SYSTEM_TEAMPROJECTID)/_apis/build/definitions?api-version=2.0"
      $allSuitedBuilds = Invoke-RestMethod -Uri $allSuitesBuildUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
      
      
      "Builds Found - Finding Match for $buildToCloneName"
      $buildWeWant = {}
      foreach($buildDetails in $allSuitedBuilds.value)
      {
          "Checking Build"
          $buildDetails."name"
      
      
          if($buildDetails."name" -like $buildToCloneName)
          {
                  $xoutputname = $buildDetails."name"
              "YES! Got Build $xoutputname"
              $buildWeWant = $buildDetails
              break
          }
              else
              {
                  "Nope!"
              }
      }
      
      $buildId = $buildWeWant."id"
      
      [int]$buildIdTest = $null
      if(![int]::TryParse($buildId, [ref]$buildIdTest))
      {
          throw [Exception] "ERROR: NO BUILD ID FOUND"
      }
      
      
      "Getting the exact definition for the build"
      # You can see this in the browser using https://mycompany.visualstudio.com/ProjectWhereBuildIs/_apis/build/definitions/{BuildNumber}?api-version=2.0
      $thisBuildDefUrl = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$($env:SYSTEM_TEAMPROJECTID)/_apis/build/definitions/" + $buildId + "?api-version=2.0"
      $thisBuildDefUrl
      $thisBuildDef = Invoke-RestMethod -Uri $thisBuildDefUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
      
      "Assigning a new name"
      $thisBuildDef.Name = $newBuildName
      
      
      "Creating a clone build with name $newBuildName"
      $defAsJson = $thisBuildDef | ConvertTo-Json -Depth 100
      $newBuildDefUrl = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$($env:SYSTEM_TEAMPROJECTID)/_apis/build/definitions?api-version=2.0"
      $newBuildDef = Invoke-RestMethod -Uri $thisBuildDefUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Post -Body $defAsJson -ContentType "application/json" -ErrorAction Stop
      
      
      $newBuildDefAsJson = $newBuildDef | ConvertTo-Json -Depth 100
      $newBuildDefAsJson
      
      "New Build Created"
      $newBuildDef.Name
      

      【讨论】:

        猜你喜欢
        • 2015-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-22
        • 2012-08-24
        • 1970-01-01
        相关资源
        最近更新 更多