使用 Jenkins、MSBuild、NuGet 和 Git 进行持续集成(第一部分)





5.00/5 (3投票s)
在本博客系列中,我将向您解释如何设置持续集成。
最近我一直在使用 MSbuild 为我的 C# 项目设置一些持续集成 (CI)。在本博客系列中,我将向您解释如何设置持续集成。
首先,我们将创建一个 MSBuild 脚本来编译我们的代码。我们还将创建一个小的批处理文件,以便轻松执行 MSbuild 脚本。
在准备就绪后,我们将向构建脚本添加几个目标,以运行例如单元测试、集成测试、代码覆盖率、打包等。
因此,我们将采用敏捷方法,并根据验证学习改进我们的构建过程。
首先,我们需要了解 MSbuild 的一些基本知识。我认为网上有足够的页面可以为您提供基本的介绍。一个好的起点是 MSDN 文档 关于 MSBuild。
让我们假设我们在 Git 仓库 / 本地文件系统中具有以下项目结构。
- src(包含我们的源代码)
- lib(包含构建输出以及 NuGet 上不可用的第三方库)
- reports(包含代码覆盖率报告、测试场景和测试结果)
- ci.msbuild(您的 msbuild 文件)
- ci.msbuild.cmd(您的批处理文件,用于在本地机器上执行构建)
ci.msbuild
在构建文件的第一个版本中,我们只有一个目标(Compile)。此目标将构建我们的项目。我们不使用解决方案文件,因为有人可以在解决方案配置中禁用项目。通过显式使用项目,我们可以确保构建所有必要的项目。我们还有一个 PropertyGroup 来定义一些变量。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
DefaultTargets="Compile">
<PropertyGroup>
<Configuration>Debug</Configuration>
<Platform>AnyCPU</Platform>
<DefineSolutionProperties>false</DefineSolutionProperties>
<!-- General Paths -->
<RootPath>$(MSBuildProjectDirectory)</RootPath>
<SrcPath>$(RootPath)\src</SrcPath>
<ReportsPath>$(RootPath)\reports</ReportsPath>
<ToolsPath>$(RootPath)\tools</ToolsPath>
<Packages>$(SrcPath)\packages</Packages>
</PropertyGroup>
<Target Name="Compile">
<Message Importance="high" Text="Compiling projects"/>
<MSBuild Projects="$(SrcPath)\MyProject.Core\MyProject.Core.csproj"
Properties="Configuration=$(Configuration);Platform=$(Platform)" />
<MSBuild Projects="$(SrcPath)\MyProject.Web\MyProject.Web.csproj;$(SrcPath)\MyProject.Win\MyProject.Win.csproj"
Properties="Configuration=$(Configuration);Platform=$(Platform)"
BuildInParallel="true" />
</Target>
</Project>
</noscript>
ci.msbuild.cmd
使用以下批处理文件,我们可以轻松执行构建脚本并提供构建配置。
@echo off
setlocal
set msbuild="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe"
set /p configChoice=Choose your build configuration (Debug = d, Release = r? (d, r)
if /i "%configChoice:~,1%" EQU "D" set config=Debug
if /i "%configChoice:~,1%" EQU "R" set config=Release
%msbuild% _ci.msbuild /nologo /m /v:m /t:Compile /p:Configuration=%config%
pause
endlocal
如您所见,我们使用 msbuild.exe 并将我们的 ci.msbuild 文件作为参数传递。/nologo 参数会从控制台输出中删除一些 msbuild 标题文本。/m 参数会根据您的机器中可用的处理器启用并行构建。/v:m 参数将详细程度设置为最小,因此不会将所有内容输出到控制台。/t:Compile 参数告诉 msbuild.exe 执行构建文件中的 Compile 目标,而 /p:Configuration=%config% 参数会将我们的构建配置(Debug/Release)注入到构建中。
如果我们跳过 /p 参数,默认配置将为 Debug,如构建脚本的 PropertyGroup 中定义。如果我们跳过 /t 参数,默认目标 Compile 将被执行,如我们的 msbuild 文件中定义。
因此,现在您可以使用一个简单的批处理文件来构建您的项目。在博客的下一部分中,我将描述添加一个 LoadNuGetPackages 目标,该目标将根据您的包配置下载所有 NuGet 包。至少我们今天大多数人都使用 NuGet。我们还将添加一个 Clean 目标,该目标将在我们再次编译之前清理我们的目录,这样我们就不会被早期编译的旧程序集所困扰。请与您的朋友分享这篇文章,并期待本系列的下一部分 。
文章 使用 Jenkins、MSBuild、NuGet 和 Git 进行持续集成(第一部分) 最初发表在 Marco Franssen 上。