Использование переменной среды Jenkins Variable на шаге MSBuild

В настоящее время я использую Jenkins "Version Number Plug-In" для установки переменной среды для версии сборки. Это отлично работает в jenkins, но мне нужен способ передать это MSBuild, чтобы обновить номер версии exe и dll. Я попробовал конфигурацию ниже, но он не обновляет версию сборки

Version Number Config

Build Config

Ответ 1

Имя переменной среды должно быть записано без процентных меток ('%'), например:

VERSION

Кроме того, я думаю, что вам хорошо идти.

Может также рассмотреть вопрос об изменении ${BUILDS_ALL_TIME}
 для изображения ${BUILDS_ALL_TIME, XX}

(это приведет к использованию двузначного номера сборки с ведущими нулями)

Ответ 2

Это цель 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)\(&quot;([0-9]+\.[0-9]+\.[0-9]+)(\.[0-9]+)?&quot;\)"
    ReplacementText="$1(&quot;$2.$(SVN_REVISION)&quot;)" 
    Condition="$(SVN_REVISION) != '' "/>
</Target>

Ответ 3

Самый простой способ, которым я нашел это, - использовать Изменить версию сборки. Используя этот плагин, вам нужно указать номер версии (или используемую переменную среды), и она заменит ее во всех файлах AssemblyInfo.cs в вашей рабочей области.

Ответ 4

Очень быстрая работа над этим - создать задачу powershell перед вашей задачей msbuild. Предполагается, что вы определили переменную VERSION, как указано выше (без %%). И вы проверяли рабочее пространство delete перед началом сборки.

Это код задачи powershell.

gci -rec -Filter *AssemblyInfo* | ForEach { (Get-Content $_.FullName) | ForEach-Object {$_ -replace "1.0.0.0",$env:VERSION } | Set-Content $_.FullName}