TFS 2015版本按分支编号

时间:2016-09-12 14:11:35

标签: git msbuild versioning tfs2015

我正在针对TFS 2015中的Git存储库创建持续集成构建定义。该定义配置了针对“主”和“开发”分支的触发器。

基于触发构建的分支,版本号需要按如下方式递增:

开发分支:
MAJOR.MINOR。(构建+ 1)
即;保持目前的主要&次要版本,仅增加内部版本号

主分支:
主要的。(小+ 1).0
即;维护主要版本,增加次要版本并重置开发分支上后续构建的构建号

成功构建完成后,各个分支需要应用标记(标签)来指示构建的版本。

2 个答案:

答案 0 :(得分:1)

经过一番研究后,我决定通过使用两个构建定义(master& dev)和一个针对主构建定义执行的PowerShell脚本来动态更新dev。

由于这可能对将来的其他人有用,这是我的PowerShell脚本......

# Gather environment variables from TFS...
$buildNumber = $env:BUILD_BUILDNUMBER
$tfsCollectionUri = $env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI
$teamProjectId = $env:SYSTEM_TEAMPROJECTID
# Enable "Allow Scripts to Access OAuth Token" in the "master" build's Options
$accessToken = $env:SYSTEM_ACCESSTOKEN
# Declare "DevBuildDefinitionId" in the "master" build's Variables and populate with the id of the "dev" build
$devDefinitionId = $env:DevBuildDefinitionId

# Construct the new build number format based on the latest build number...
$parts = $buildNumber.split(".")
$buildNumberFormat = ($parts[0] + "." + $parts[1] + "`$(Rev:.r)")

Write-Host 
Write-Host "New Dev build number format: $buildNumberFormat"
Write-Host 

$uri = "$($tfsCollectionUri)$teamProjectId/_apis/build/definitions/$($devDefinitionId)?api-version=2.0"

#Retrieve the dev build definition...
try {
    $definition = Invoke-RestMethod -Uri $uri -Method Get -Headers @{ Authorization = "Bearer $accessToken" }

    # Modify the version number format...
    $definition.buildNumberFormat = $buildNumberFormat

    # Update the build definition
    try {
        $body = ConvertTo-Json $definition -Depth 1000
        $result = Invoke-RestMethod -Uri $uri -Method Put -Headers @{ Authorization = "Bearer $accessToken" } -Body $body -ContentType application/json

        Write-Host 
        Write-Host "Dev build definition successfully updated"
        Write-Host 
    }
    catch {
        Write-Host 
        Write-Host "Failed to update the Dev build definition..."
        Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
        Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription
        Write-Host 
    }
}
catch {
    Write-Host 
    Write-Host "Failed to retrieve the Dev build definition..."
    Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
    Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription
    Write-Host 
}

请注意,为了使其正常工作,您需要轻松修改“项目构建集合服务”权限,以避免在请求更新时收到安全性异常。要执行此操作,请导航“构建定义”列表,单击开发构建旁边的下拉列表,选择“安全性”,滚动到“用户”部分并设置“编辑构建定义”权限以允许

答案 1 :(得分:0)

目前,在单个TFS构建定义中无法实现这种复杂的版本号设置。

TFS无法根据哪个分支触发构建来增加构建号。它使用$(Rev:.rr)来确保每个已完成的构建都具有唯一的名称。构建完成后,如果构建号中没有其他内容发生更改,则Rev整数值增加1 。更多细节请参考这两个帖子Specify general build definition settings& vNext Build Awesomeness – Managing Version Numbers

根据您的情况,您可能需要创建两个构建定义对应 develop master 分支。然后手动增加开发构建定义中的次要值或使用powershell脚本来实现此目的。