在MSBuild的步骤中使用詹金斯版本环境变量(Using Jenkins Version Envi

2019-07-31 11:07发布

我目前使用的詹金斯“版本号插件”来设置环境变量的内部版本。 这工作詹金斯内正常,但我需要一种方法来此传递给这样的MSBuild版本号的exe和dll的更新的。 我试过配置波纹管,但它不会更新该版本的版本

Answer 1:

环境变量名称应写而不 %的痕迹(“%”),就像这样:

VERSION

除此之外,我认为你是好去。

也可考虑改变
${BUILDS_ALL_TIME}

${BUILDS_ALL_TIME, XX}

(这将强制两位数集结号带前导零)



Answer 2:

这是一个目标的MSBuild替换与从詹金斯的SVN_REVISION变量文件GlobalAssemblyInfo.cs版本号。

我们有一个多项目解决方案,其中每个项目引用的公共信息(如版本)一样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>


Answer 3:

从来就发现,要做到这一点,最简单的方法是使用变化大会版本 。 使用该插件你只需要提供的版本号(或者使用环境变量),它会取代它在你的工作空间中所有的AssemblyInfo.cs文件。



Answer 4:

一个非常快速的工作四处这是你的MSBuild任务之前创建一个PowerShell任务。 这是假设你定义VERSION变量如上(不%%)。 与您共建启动前检查删除工作区。

这是PowerShell的任务的代码。

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


文章来源: Using Jenkins Version Environment Variable in the MSBuild step