Как начать сборку vNext TFS 2015 с определенного номера

Я использую систему сборки vNext TFS 2015.

В настоящее время у меня есть версии моих сборок в традиционном формате. MAJOR.MINOR-rev.RevisionNumber. Итак, если у меня есть сборка для Major 1, Minor 12, версия сборки будет выглядеть как 1.12-rev.1 при запуске. Я хотел бы знать, возможно ли, чтобы версия сборки начиналась с номера, отличного от единицы, скажем, 55. Так, чтобы версия сборки выглядела как 1.12-rev.55, а затем увеличивалась на единицу, как обычно, после этого.

7 ответов

Решение

К сожалению, это невозможно.

Каждое определение сборки имеет поле формата номера сборки, где вы можете использовать некоторые макросы, чтобы определять, как должен выглядеть полученный номер сборки. В этом формате мы используем $(Rev:.rr) Его начало одним.

Что такое $(Rev:.rr)?

Чтобы каждая завершенная сборка имела уникальное имя. Когда сборка завершена, если больше ничего в номере сборки не изменилось, целочисленное значение Rev увеличивается на единицу.

Источник: MSDN

Более того, если вы хотите генерировать пользовательский номер сборки без приращения. Вот блог с подробными процедурами: Генерация пользовательских номеров сборки в TFS Build vNext

На самом деле, это можно сделать в сборке vNext без взлома базы данных.

Есть 2 шага.

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

#Set the BuildNumberOffset. (Change this to the difference between the TFS build number,
#and the number that your build needs.) 
$BuildNumberOffset = 543  

#Don't change 
$BuildNumberParts = $($env:BUILD_BUILDNUMBER) -split '\.' 
$TFSRevision = [int]$BuildNumberParts[$BuildNumberParts.Length-1] 
$BuildNumberParts[$BuildNumberParts.Length-1] = ($TFSRevision + $BuildNumberOffset).ToString() 
$BuildNumber = [string]::Join(".", $BuildNumberParts) 
Write-Host "##vso[build.updatebuildnumber]$BuildNumber" 

Во-вторых, в поле "Метка формата" на вкладке репозитория установите формат метки "$(Build.BuildNumber)" вместо "$(Build.DefinitionName)$(rev:.r)". Это важно, чтобы ваш ярлык совпадал с вашим обновленным номером сборки.

Есть способ сделать это. Это не красиво, но это работает.

Предполагая, что у вас есть формат номера сборки что-то вроде $(Major).$(Minor)-rev$(rev:.r)

Для этого поставьте в очередь сборку, которая получит номер 1.12-rev.1. Затем перейдите в базу данных TFS и в таблицу под названием tbl_Build, Найдите последнюю сборку и измените значение в BuildNumberRevision столбец до 54.

Следующая начавшаяся сборка теперь будет 1.12-rev.55.

Это также было очень болезненно для нас, миграция с существующей системы CI с собственной нумерацией сборок, нам нужно было, чтобы номера сборок увеличивались с определенного значения. В организации не разрешалось взламывать базы данных, зачеты казались помехой.

В конце концов, мы использовали скрипт AutoIt для запуска и остановки сборки и удаления результата сборки с помощью веб-интерфейса и оставили его работающим. Не приятно, но это сделало работу.

Требуется настройка разрешения экрана и т. д., возможно, также тайминга. Используйте AutoIt Window Info, чтобы найти расположение кнопок, убедитесь, что браузер работает в полноэкранном режиме (не в окне). Запустите его на несколько циклов, чтобы убедиться, что он надежный, прежде чем увеличивать цикл.

      #include <AutoItConstants.au3>
;Increment TFS build count (Chrome browser buttons locations).  Start from build result page.

For $i = 1 To 15 Step 1

ConsoleWrite ( "Loop " & $i & " of 5" & @CRLF )
Sleep(200)
MouseClick($MOUSE_CLICK_PRIMARY, 1800, 200, 2)
Sleep(500)
MouseClick($MOUSE_CLICK_PRIMARY, 1150, 881, 2)
Sleep(2000)
MouseClick($MOUSE_CLICK_PRIMARY, 1800, 200, 2)
Sleep(500)
MouseClick($MOUSE_CLICK_PRIMARY, 1055, 165, 2)
Sleep(10000)

Next

TFS/Devops — это действительно незрелая система CI, и это не патч для того, что мы использовали. К сожалению, корпоративная политика говорит, что мы переходим на TFS, так как никто никогда не был уволен за покупку продуктов Microsoft (но многие люди должны были быть уволены за их покупку / принуждение их туда, где им не место).

Не могли бы мы просто установить это вручную в формате для одной сборки, то есть:

$(Major).$(Minor)-rev$(rev:.54)

и затем вернитесь обратно к:

$(Major).$(Minor)-rev$(rev:.r)

Не пробовал, но если это сработает, это сохранит хакинг в базе данных.

Вы можете сделать это легко, но только если вы используете Git-репозиторий в сочетании с инструментом под названием GitVersion

Это замечательный инструмент, который я всегда использую в своих репозиториях git. Для вашего варианта использования: если у вас есть версия 1.2.3, и вы хотите перейти к версии 1.2.55, вы просто добавляете тег git 'v1.2.55', и он начнет версионирование оттуда. GitVersion намного сложнее и делает намного больше, но это одна из особенностей. Вам не нужно связываться со специальными сценариями PowerShell или чем-то еще, вместо этого он читает историю вашего git-репо, а теги git переопределяют рассчитанное управление версиями. Уже есть расширение TFS/VSTS/Azure Devops под названием GitVersion, которое прекрасно работает от того же разработчика.

Ответ @Steve Sims по-прежнему работает с TFS 2017 vNext. Большое спасибо!

Мне оставалось только сделать первый шаг, "чтобы добавить скрипт как встроенный скрипт powershell в мою сборку". Благодаря @PainElemental

С этим "Форматом номера сборки" во вкладке "Параметры" он работает:

$(BuildDefinitionName)_1.2.0$(rev:.r)

Я не помечал свои источники при сборке, поэтому я не проверял:

Во-вторых, в поле "Метка формата" на вкладке репозитория установите формат метки "$(Build.BuildNumber)" вместо "$(Build.DefinitionName)$(rev:.r)". Это важно, чтобы ваш ярлык совпадал с вашим обновленным номером сборки.

Я думаю, вы можете редактировать формат метки в "Расширенных" опциях GetSources. (обычно скрытый).

Другие вопросы по тегам