2016-09-12 2 views
1

Я создаю определение построения непрерывной интеграции против репозитория Git в TFS 2015. Определение сконфигурировано с помощью триггеров против ветвей «master» и «develop».Нумерация версий TFS 2015 по ветству

Основываясь на ветви, которая вызывает накопление, номера версий должны быть увеличены следующим образом:

развивать отрасль:.
MAJOR.MINOR (сборка + 1)
т.е.; Поддерживает текущие основные & минорных версий, увеличивает номер сборки только

мастер ветви:.
основных (второстепенный + 1) .0
т; Поддерживает основную версию, увеличивает второстепенную версию и сбрасывает номер сборки для последующих сборок в ветке разработки.

По завершении успешной сборки соответствующие ветви должны иметь тег (метку), применяемый для указания версии, которая была построена ,

ответ

0

После небольшого исследования я решил достичь этого, используя два определения сборки (мастер & 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» разрешений, чтобы избежать получения исключения безопасности при запросе обновления. Для этого перейдите в список «Определения конструкций», щелкните раскрывающийся список рядом с конструкцией dev, выберите «Безопасность», выделите раздел «Пользователи» и установите разрешение «Редактировать определение сборки», чтобы разрешить

0

Этот тип сложной версии номера не может быть достигнут в одном определении сборки TFS.

TFS не может увеличить номер сборки, основываясь на том, какая ветвь запускает сборку. Он использует $(Rev:.rr), чтобы гарантировать, что каждая завершенная сборка имеет уникальное имя. Когда сборка завершена, если ничто иное в номере сборки не изменилось, целочисленное значение Rev равно с добавлением одного. Более подробная информации, пожалуйста, смотрите эти две темы Specify general build definition settings & vNext Build Awesomeness – Managing Version Numbers

Для вашей ситуации, вы, возможно, придешься создать два определения сборки соответствует разработке и мастера филиала. Затем вручную увеличьте второстепенное значение в определении разработки сборки или используйте сценарий powershell для этого.

+1

Спасибо за ответ Патрик. Это похоже на то, что должно быть довольно распространенным требованием, вы ожидаете, что это может измениться в TFS15? –

+0

В новостях и выпуске продукции вы можете ознакомиться с https://www.visualstudio.com/en-us/news/news-overview-vs.aspx. На данный момент у меня нет соответствующего обновления. Кроме того, я немного смущен вашей структурой номера версии. Почему второстепенная версия должна быть увеличена только тогда, когда простая сборка запускается на главной ветке вместо использования общей структуры '(основная версия). (Малая версия). (Номер редакции). (Номер сборки)' http: //programmers.stackexchange ,com/questions/166215/when-do-you-change-your-major-minor-patch-version-number –

+1

Не уверен, что я следую вашему вопросу, схема, которую мы используем, является стандартной системой семантического управления версиями ... Основная версия будет означать существенное изменение приложения (например, что-то, что приведет к нарушению обратной совместимости). Незначительная версия подразумевает меньшие изменения (например, улучшение/уточнение существующей функциональности, которая поддерживает обратную совместимость) Строка/номер редакции используется для обозначения патча или, в нашем случае, тестовой версии, ведущей к новой Малой –

Смежные вопросы