Git TFS 2015版本编号(按分支机构)

Git TFS 2015版本编号(按分支机构),git,msbuild,versioning,tfs-2015,Git,Msbuild,Versioning,Tfs 2015,我正在TFS 2015中针对Git存储库创建一个持续集成构建定义。定义配置了针对“主”和“开发”分支的触发器 根据触发生成的分支,版本号需要按如下方式递增: 发展分支机构: 大调。小调。(构建+1) ie;维护当前主要和次要版本,仅增加版本号 主分支机构: 大调(小调+1)。0 ie;维护主要版本,增加次要版本,并重置开发分支上后续版本的版本号 成功构建完成后,各分支需要应用一个标记(标签)来指示构建的版本。这种复杂的版本号设置目前无法在单个TFS构建定义中实现 TFS无法根据触发生成的分支增加

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

根据触发生成的分支,版本号需要按如下方式递增:

发展分支机构:
大调。小调。(构建+1)
ie;维护当前主要和次要版本,仅增加版本号

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


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

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

TFS无法根据触发生成的分支增加生成数。它使用
$(Rev:.rr)
来确保每个完成的构建都有一个唯一的名称。构建完成后,如果构建编号中的其他内容没有更改,则Rev整数值将增加一。更多详细信息,请参阅这两个线程&


对于您的情况,您可能需要创建两个构建定义分支:开发分支和主分支。然后手动增加“开发生成定义”中的次要值,或者使用powershell脚本来实现此目的。

经过进一步研究,我决定使用两个生成定义(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 
}

请注意,为了使其正常工作,您需要缓慢地修改“Project Build Collection Service”权限,以避免在请求更新时收到安全异常。为此,请浏览“生成定义”列表,单击开发版本旁边的下拉列表,选择“安全”,滚动到用户部分,并将“编辑生成定义”权限设置为允许

感谢您的回复。这听起来应该是一个相当普遍的要求,您是否预计TFS15中可能会发生变化?新闻和生产发布,您可以跟进。目前还没有相关的更新。此外,我对你的版本号结构有点困惑。为什么在主分支上触发简单构建而不是使用公共结构时,应该增加次要版本
(主要版本)。(次要版本)。(修订号)。(构建号)
我不确定我是否理解您的问题,我们使用的模式是标准语义版本控制系统。。。主版本将意味着对应用程序的重大更改(例如,会破坏向后兼容性的内容)次要版本将意味着较小的更改(例如,现有功能的改进/完善,以保持向后兼容性)版本号/修订号用于表示修补程序,或者在我们的情况下,一个新的小调的测试版本