Использование переменной среды версии Jenkins на шаге MSBuild
в настоящее время я использую плагин Jenkins "Version Number" для установки переменной среды для версии сборки. Это отлично работает в Дженкинсе, но мне нужен способ передать это MSBuild, чтобы обновить номер версии exe и dll. Я попробовал config ниже, но он не обновляет версию сборки
4 ответов
Имя Переменной Среды должно быть написано без процентные отметки ( " % " ), например:
VERSION
кроме того, я думаю, вы хорошо идти.
может также рассмотреть возможность изменения${BUILDS_ALL_TIME}
к${BUILDS_ALL_TIME, XX}
(Это обеспечит двухзначный номер сборки с ведущими нулями)
это цель MSBuild, которая заменяет номер редакции в файле GlobalAssemblyInfo.cs с переменной SVN_REVISION от Jenkins.
У нас есть решение для нескольких проектов, где каждый проект ссылается на один и тот же GlobalAssemblyInfo для общей информации (например, версия). Измените это, чтобы оно соответствовало вашей настройке.
при наличии условия Exists целевой объект выполняется на компьютерах разработчиков, где MSBuildCommunityTasks не установлен. В этих случаях версия номер в GlobalAssemblyInfo.cs остается нетронутым.
<Target Name="InjectSVNRevision" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')">
<!-- When this build is done by the Jenkins CI server; the svn revision number is set in the environment variable SVN_REVISION
This little snippet replaces the revision number in GlobalAssemblyInfo.cs with this svn revision number
-->
<Message Text="Injecting SVN revision number in GlobalAssemblyInfo.cs" />
<FileUpdate Files="GlobalAssemblyInfo.cs"
Multiline="true"
Singleline="false"
Regex="(AssemblyVersion|AssemblyFileVersionAttribute|AssemblyFileVersion)\("([0-9]+\.[0-9]+\.[0-9]+)(\.[0-9]+)?"\)"
ReplacementText="(".$(SVN_REVISION)")"
Condition="$(SVN_REVISION) != '' "/>
</Target>
самый простой способ сделать это-использовать Изменить Версию Сборки. Используя этот плагин, вам нужно только указать номер версии (или используемую переменную среды), и она заменит его во всем AssemblyInfo.CS файлы в рабочей области.
очень быстрая работа с этим заключается в создании задачи powershell перед вашей задачей msbuild. Это предполагает, что вы определили переменную версии, как указано выше (без %%). И вы проверили удалить workspace перед началом сборки.
Это код для задачи powershell.
gci -rec -Filter *AssemblyInfo* | ForEach { (Get-Content $_.FullName) | ForEach-Object {$_ -replace "1.0.0.0",$env:VERSION } | Set-Content $_.FullName}