如何在Visual Studio Online中克隆一个构建定义

4
我正在使用连接到Visual Studio在线的Team Explorer的VS 2013。
我有一个“release”构建定义,并希望将其复制/克隆到新的“debug”构建定义中。但是,Team Explorer似乎没有给我这个选项 :-(
我尝试使用“Community TFS Build Manager”来克隆构建定义,但它似乎不允许这样做,因为它要求在不同的项目中进行克隆。
我尝试使用TFS Power tools TFPT Powershell命令,但它总是给我一个错误“无法确定源代码控制服务器”。
那么,有没有推荐的方法来复制构建定义呢?
3个回答

4

前往团队资源管理器。

选择您想要克隆的特定版本。

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

这样,您就可以克隆构建定义,并将其保存在同一项目下,名称为:

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


2
您还需要“管理构建权限” 权限。 - Steve L.

3
从Visual Studio Team Services中,您可以通过浏览“Build and Release”->“Builds”->“Build Definitions”,将鼠标悬停在要克隆的构建定义上,然后单击出现的省略号按钮并从上下文菜单中选择“Clone”来克隆构建。请参考以下截图: Build definition context menu

1

如果您想使用Powershell自动克隆VSTS中的构建,请使用以下脚本(与此文档一致)。

您需要更改:$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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接