在现代软件开发过程中,自动化构建和部署是提高开发效率和质量的关键步骤。本文将详细介绍如何通过MSBuild和Team Foundation Server (TFS) 实现自动化构建和部署流程。将讨论构建目录的配置、文件复制逻辑,以及如何动态确定部署位置。
构建目录是构建机器上的路径,这个路径通常是固定的。而部署位置则是希望在构建成功后将文件复制到的路径。根据开发环境,可能需要将这些文件复制到不同的服务器上。例如,可能会有开发、测试和生产环境。在流程中,会在部署位置保留构建的副本,并从这个位置复制到其他服务器。这允许恢复以前的构建。
Team Build 使用MSBuild来执行构建过程。MSBuild 允许传递输入参数,这些参数可以用来运行条件语句并动态确定部署位置。当排队一个新的构建时,会在 MSBuild 命令行参数中添加一个参数(参见TFSExplorer 下的 Queue New Build)。这个参数的格式如下:
/p:DeployTo=develop
参数的名称和值就是一个键/值对,可以在构建脚本中引用它,就像在 XSLT 文件中使用参数一样。/p 是一个 MSBuild 命令开关,表示属性。TFS构建项目文件实际上是一个XSLT文件,所以可以利用 Choose 条件语句来确定文件复制的位置。
以下是一个构建脚本的示例,它根据 DeployTo 参数的值来设置 DeployPath 变量。如果没有提供参数,它默认为开发环境。还可以添加其他变量,用来设置其他属性,比如构建质量。请确保将路径替换为环境中的相关路径。
<Choose>
<When Condition="'$(DeployTo)'=='stage'">
<PropertyGroup>
<DeployPath>\\stageServer\drop</DeployPath>
</PropertyGroup>
</When>
<When Condition="'$(DeployTo)'=='production'">
<PropertyGroup>
<DeployPath>\\prodServer\drop</DeployPath>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<DeployPath>\\devServer\drop</DeployPath>
</PropertyGroup>
</Otherwise>
</Choose>
这个脚本基本上检查 DeployTo 参数的值,并创建一个名为 DeployPath 的变量。然后可以创建一个目标(一组任务),并确定文件复制的位置。
现在可以定义一个目标,来确定文件复制的位置。
<Target Name="AfterDropBuild">
<Message Text="Copying Files to: $(DeployPath)"/>
<ItemGroup>
<Content Include="$(DropLocation)\$(BuildNumber)\Release\myproduct\**\*"/>
</ItemGroup>
<Copy SourceFiles="@(Content)" DestinationFolder="$(DeployPath)\%(RecursiveDir)" ContinueOnError="false"/>
</Target>