2012-09-10 81 views
10

我正在使用Jenkins的“版本号插件”为构建版本设置环境变量。这在jenkins中工作正常,但我需要一种方法将此传递给MSBuild,以便更新exe和dll的版本号。我试过配置波纹管,但它不会更新该版本的版本在MSBuild步骤中使用Jenkins版本环境变量

Version Number Config

Build Config

回答

5

环境变量名应该写百分比痕迹(“%”),这样:

VERSION 

除此之外,我觉得你很好走。

也可以考虑改变
${BUILDS_ALL_TIME}

${BUILDS_ALL_TIME, XX}

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

+2

是的,我想通了,也似乎MSBuild.exe dosn't支持/ p:版本默认情况下。你需要解决MSBuld扩展。我最终编写了一个控制台应用程序,在构建之前更新AssemblyInfo.cs并将其传递给环境变量。这比用复杂的msbuild扩展搞定更快 –

+0

嗯,我希望你找到一个很好的方式将版本传递给构建,因为我们还使用了一个量身定制的脚本。 – Gonen

2

这是一个的MSBuild目标,它取代了修订在文件GlobalAssemblyInfo.cs中使用Jenkins的SVN_REVISION变量编号。

我们有一个多项目解决方案,其中每个项目引用相同的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> 
1

我发现最简单的方法是使用Change Assembly Version。使用该插件只需提供版本号(或使用的环境变量),并将其替换为工作区中的所有AssemblyInfo.cs文件。

0

一个非常快速的解决方法是在你的msbuild任务之前创建一个powershell任务。这假设你如上定义了VERSION变量(没有%%)。并且在构建开始之前检查了删除工作区。

这是PowerShell任务的代码。

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