Jenkins DevOps 实践之持续集成时打Label
这篇文章记录了如何优雅的在持续集成的过程中打Label.如有不对欢迎指正。
0. 我们准备好Solution如下图所示一个普通.NET程序:
1. 我们添加一个名为VersionInfo.cs文件, 放在SolutionItems 文件夹中。这个文件用来给所有的项目共享。
这个文件其实就只有这么一句话,让后把所有其他项目中的 “Properties\AssemblyInfo.cs”中以下代码注释掉或者直接删掉因不会再用到了。
//[assembly: AssemblyVersion("1.0.0.0")]
2. 将VersionInfo.cs文件已链接的形式加到每个项目额Properties文件夹中,如步骤0的截屏所示。这一步的作用就是让所有的项目使用同一个版本号。如此Jenkins修改版本好就只要改一个文件了。
3. 修改WebSite的项目文件,在项目文件(.csproj)最后加上Target标记如下图所示
<Target Name="BeforeBuild"> <WriteLinesToFile Condition=" '$(AsmVersion)' != '' " File="..\VersionInfo.cs" Overwrite="True" Lines="[assembly: System.Reflection.AssemblyVersion("$(AsmVersion)")]"> </WriteLinesToFile> </Target>
聪明的你肯定注意到 “$(AsmVersion)“ 这个标记用给MSBuild传递参数。
4. 回到Jenkins,
a. 首先我们得安装好Version NUmber plugin。
b. 下载TEE-clc https://github.com/Microsoft/team-explorer-everywhere/releases
注意运行TEE需要JDK。请自行安装
5. 配置Version Number Plugin
6. 配置build Step。 给当前build的代码打Label, 代码如下图所示。为毛不用TF.EXE原因是因为这货要用太麻烦。只有这个步骤放在那一步,请自行决定没有标准。下图中我将build Number作为Label名称,有利于后面发现问题找到到对应代码。
7. 把AssemblyVersion 的Number替换掉:
"C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe" "%WORKSPACE%\proj.sln" /target:rebuild /p:AsmVersion=%VERSION%
8. 最后建议在网页上把Version 号码显示出来。这个例子用的是MVC,可将下面代码放在View的某个角落:
version:@ViewContext.Controller.GetType().Assembly.GetName().Version Date:@File.GetCreationTime(ViewContext.Controller.GetType().Assembly.Location)