Как я могу сгенерировать пользовательский номер сборки в TeamCity и затем добавить его к информации о сборке?
Я провел некоторый поиск по этой теме и смог найти отдельные решения для генерации пользовательских номеров сборки, а также информацию о сборке патча, однако я не могу выполнить и то, и другое. При использовании пользовательского сценария POWERSHELL, который я нашел в поиске, я могу установить номер сборки, который я создаю с помощью сценария, однако этот номер сборки не исправляется. Единственный успех, который я имею в исправлении, - это использование номеров наборов и счетчика. Но число, которое создает сценарий POWERSHELL, не сохраняется до такой степени, с которой может работать исправитель сборки. Я делаю это неправильно?
2 ответа
Я наконец решил это с помощью немного предоставленной логики Чайтаньи... но изменил:
$ww = ([Math]::Floor([DateTime]::Now.DayOfYear/7)+1)
Write-Host "##teamcity[buildNumber '%major.minor%.$ww.%build.counter%']"
$fileLocation = Join-Path -Path "%teamcity.build.checkoutDir%" -ChildPath "\SourceDir\AssemblyInfo.cs"
$oldValue = "AssemblyFileVersion\(""(\d+)\.\d+\.\d+\.\d+""\)"
$newValue = [string]::Concat("AssemblyFileVersion(""%major.minor%.", $ww, ".%build.counter%", """)")
(get-content $fileLocation) | foreach-object {$_ -replace $oldValue, $newValue} | set-content $fileLocation
В нашем проекте мы решили это с помощью файла CommonAssemblyInfo.cs. В основном добавьте его в свое решение, удалите файлы AssemblyInfo.cs из отдельных файлов, и при компиляции все dll будут иметь информацию о сборке, указанную в файле CommonAssemblyInfo.cs.
Мы обновляем этот файл как первый шаг перед компиляцией. Уникальный номер, который мы используем, является идентификатором набора изменений из системы контроля версий (в нашем случае TFS). По сути, номер набора изменений управления исходным кодом гарантированно уникален и очень актуален. Он точно скажет, какая сборка была сгенерирована с помощью какого набора изменений в вашем контроле исходного кода.
По сути, первым шагом в нашей конфигурации сборки является сценарий powershell, который выглядит примерно так, как показано ниже (соответственно, обновите путь до CommonAssemblyInfo.cs)
$fileLocation = Join-Path -Path "%teamcity.build.checkoutDir%" -ChildPath "Source\CommonAssemblyInfo.cs"
$oldValue = "AssemblyVersion\(""(\d+)\.\d+\.\d+\.\d+""\)"
$newValue = 'AssemblyVersion("$1.0.0.%build.vcs.number%")'
(get-content $fileLocation) | foreach-object {$_ -replace $oldValue, $newValue} | set-content $fileLocation
Так что соберите setp 1, обновите вашу версию сборки с номером Changeset, как указано выше. Шаг 2, скомпилируйте ваше решение. Шаг 3 к x, Тестирование, Развертывание и т. Д. И т. Д.