`

项目管理实践【五】自动编译和发布网站

阅读更多

 

 

转自:http://www.cnblogs.com/ttzhang/archive/2008/11/10/1330321.html

 

 

 

在上一篇教程项目管理实践【三】每日构建【Daily Build Using CruiseControl.NET and MSBuild】 中,我们讲解了如何使用CCNET+MSBuild来自动编译项目,今天我们讲解一下怎么使用MSBuild+WebDeployment+Robocopy自动编译过和部署ASP.NET网站。
首先安装下面的三个软件:

1.MSBuild.Community.Tasks下载:
http://msbuildtasks.tigris.org/files/documents/3383/28296/MSBuild.Community.Tasks.msi

源代码:
http://msbuildtasks.tigris.org/files/documents/3383/36642/MSBuild.Community.Tasks.v1.2.0.306.zip

 2.WebDeployment下载:

For VS2005
http://download.microsoft.com/download/9/4/9/9496adc4-574e-4043-bb70-bc841e27f13c/WebDeploymentSetup.msi

For VS2008 [RTW]
http://download.microsoft.com/download/9/4/9/9496adc4-574e-4043-bb70-bc841e27f13c/WebDeploymentSetup.msi

 3.Utility Spotlight Robocopy GUI 下载:【下载后,解压后安装,Vista不用安装】
http://download.microsoft.com/download/f/d/0/fd05def7-68a1-4f71-8546-25c359cc0842/UtilitySpotlight2006_11.exe

安装完成后,就开始今天的教程了。

我们以前面教程中创建的StartKit解决方案为例子,结构如下:

在上图所示的Web项目StartKit上右键点击,然后点击Add Web Deployment Project…,如下图:

 弹出下面的窗体,分别输入部署项目名称和项目要放置的位置,如下图:

 点击OK按钮后,解决方案的结构如下图:

今天会讲到下面二个方法,上面的步骤一样,从这里开始,下面的步骤有区别。

方法一:使用WebDeployment创建虚拟目录

优点:使用简单

缺点:功能不够强大,只能部署到虚拟目录

右键点击部署项目,点击菜单中的Property Pages,如下图:

在下面的窗体中,点击左侧的Complication,在右侧的Output Folder下的文本框中输入编译后网站文件的输出路径:

 然后,点击左侧的Deploment,在右侧选中Create an IIS virtual directory for the output folder前面的CheckBox,在下面的Virtual directory name下的文本框中输入虚拟目录的名字,Replace the existing virtual directory前面的CheckBox根据实际情况确定是否选中,如下图:

 点击确定按钮,编译部署项目StartKit.csproj_deploy,编译成功后,我们打开IIS,在默认网站下可以看到虚拟目录StartKit。OK,成功了!

方法二:使用WebDeployment+MSBuild+Robocopy

优点:功能强大

缺点:配置有点麻烦

这个方法不用配置Property Pages,直接右键点击StartKit.csproj_deploy项目文件,在菜单中点击Open Project File打开部署项目文件:

修改部署项目文件为下面的内容:

 

 

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->  1 <!--Microsoft Visual Studio 2008 Web Deployment Project http://go.microsoft.com/fwlink/?LinkID=104956-->
  2 
  3 <Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  4 <PropertyGroup>
  5 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
  6 <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
  7 <ProductVersion>9.0.21022</ProductVersion>
  8 <SchemaVersion>2.0</SchemaVersion>
  9 <ProjectGuid>{00000000-0000-0000-0000-000000000000}</ProjectGuid>
 10 <SourceWebPhysicalPath>..\StartKit</SourceWebPhysicalPath>
 11 <SourceWebProject>{96E1A089-3FBB-4909-94F6-172665994449}|StartKit\StartKit.csproj</SourceWebProject>
 12 <SourceWebVirtualPath>/StartKit.csproj</SourceWebVirtualPath>
 13 <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
 14 <ProjectName>StartKit</ProjectName>
 15 <Major>1</Major>
 16 <Minor>0</Minor>
 17 <Revision>0</Revision>
 18 <VSSName>ttzhang</VSSName>
 19 <VSSPassword>123456</VSSPassword>
 20 <FtpName>anonymous</FtpName>
 21 <FtpPassword>anonymous</FtpPassword>
 22 <SmtpServerName>smtp.163.com</SmtpServerName>
 23 <FromAddress>ttzhang@163.com</FromAddress>
 24 <ToAddress>zttc@163.com</ToAddress>
 25 <MailPassword>testmail</MailPassword>
 26 </PropertyGroup>
 27 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
 28 <DebugSymbols>true</DebugSymbols>
 29 <OutputPath>.\Debug</OutputPath>
 30 <EnableUpdateable>true</EnableUpdateable>
 31 <UseMerge>true</UseMerge>
 32 <SingleAssemblyName>StartKit_deploy</SingleAssemblyName>
 33 </PropertyGroup>
 34 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
 35 <DebugSymbols>false</DebugSymbols>
 36 <OutputPath>.\Release</OutputPath>
 37 <EnableUpdateable>true</EnableUpdateable>
 38 <UseMerge>true</UseMerge>
 39 <SingleAssemblyName>StartKit_deploy</SingleAssemblyName>
 40 </PropertyGroup>
 41 <ItemGroup>
 42 </ItemGroup>
 43 <!--下面的ItemGroup节点可选,这个和项目文件StartKit.csproj中的内容相同-->
 44 <ItemGroup>
 45 <ProjectReference Include="..\BLL\BLL.csproj">
 46 <Project>{73A293A1-CDCC-4919-9B05-BA2531ADDB56}</Project>
 47 <Name>BLL</Name>
 48 </ProjectReference>
 49 <ProjectReference Include="..\DAL\DAL.csproj">
 50 <Project>{AFF6077D-DD2D-48A0-BFAD-051BD67A6953}</Project>
 51 <Name>DAL</Name>
 52 </ProjectReference>
 53 <ProjectReference Include="..\IBLL\IBLL.csproj">
 54 <Project>{620770BB-7A27-4585-9B97-44EEE349121D}</Project>
 55 <Name>IBLL</Name>
 56 </ProjectReference>
 57 <ProjectReference Include="..\Model\Model.csproj">
 58 <Project>{EA43EC2E-5890-4431-BD3E-5F6C090DEA3A}</Project>
 59 <Name>Model</Name>
 60 </ProjectReference>
 61 </ItemGroup>
 62 <!--引入MSBuildCommunityTasks-->
 63 <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
 64 <!--邮件发送-->
 65 <!--<Target Name="EmailTest" >
 66 <Message Text = " Mail sending"></Message>
 67 <Mail SmtpServer="$(SmtpServerName)"
 68 Subject="Test"
 69 Password="$(MailPassword)"
 70 From ="$(FromAddress)"
 71 To ="$(ToAddress)"
 72 Body="This is a test of the mail task." />
 73 </Target>-->
 74 <!--备份文件到FTP-->
 75 <!--<Target Name="Backup" DependsOnTargets="Zip" >
 76 <FtpUpload UserName="$(FtpName)"
 77 Password="$(FtpPassword)"
 78 LocalFile="$(ZipFileName)"
 79 RemoteUri="ftp://192.168.1.2/SourceBackup/$(ZipFileName)" />
 80 <OnError ExecuteTargets="HandleErrorBackup" />
 81 </Target>-->
 82 <!--备份文件到FTP失败则发送邮件-->
 83 <!--<Target Name="HandleErrorBackup">
 84 <Message Text="Backup failed" />
 85 <Mail SmtpServer="$(SmtpServerName)"
 86 To="$(ToAddress)"
 87 From="$(FromAddress)"
 88 Subject="$(ProjectName) Build failed"
 89 Body="Backup Failure: Could not finish Backup ." />
 90 </Target>-->
 91 <!--编译项目-->
 92 <Target Name="BuildProjectReferences">
 93 <MSBuild Projects="@(ProjectReference)" Targets="Build" />
 94 </Target>
 95 <!--生成压缩文件-->
 96 <Target Name="Zip">
 97 <!--时间格式-->
 98 <Time Format="yyyyMMddHHmmss">
 99 <Output TaskParameter="FormattedTime" PropertyName="buildDate"/>
100 </Time>
101 <Zip Files="@(ZipFiles)" ZipFileName="StartKit V$(Major)-$(Minor)-$(Revision)-$(buildDate).zip"/>
102 </Target>
103 <!--复制文件-->
104 <Target Name="Copy">
105 <!--停止IIS服务-->
106 <ServiceController ServiceName="w3svc" Action="Stop" />
107 <!--使用Robocopy复制编译后的文件到指定位置 /XD是要忽略的文件夹,/XF要忽略的文件类型-->
108 <Exec Command="Robocopy Debug c:\inetpub\StartKit /MIR /XD Fckeditor attachments .svn obj doc Test /XF *.zip *.wdproj *.user *.cs *.csproj" IgnoreExitCode="true" />
109 <!--启动IIS服务-->
110 <ServiceController ServiceName="w3svc" Action="Start" />
111 </Target>
112 <!--引入WebDeployment-->
113 <Import Project="$(MSBuildExtensionsPath)\Microsoft\WebDeployment\v9.0\Microsoft.WebDeployment.targets" />
114 <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
115 Other similar extension points exist, see Microsoft.WebDeployment.targets.-->
116 <Target Name="BeforeBuild"></Target>
117 <Target Name="BeforeMerge"></Target>
118 <Target Name="AfterMerge"></Target>
119 <Target Name="AfterBuild">
120 <!--编译成功后,执行下面的Targets-->
121 <!—不想生成ZIP文件,可以注释下面ZIP的target-->
122 <CallTarget Targets="Zip"/>
123 <CallTarget Targets="Copy" />
124 <!--<CallTarget Targets="EmailTest"/>
125 <CallTarget Targets="Backup" />-->
126 </Target>
127 </Project>


 

编译部署项目成功后,打开C\inetpub\StartKit文件夹,看看是否成功复制过去了呢?好的,我去看看,哈哈,文件果然都在,OK,成功啦!

这时候,在IIS上创建一个虚拟目录或者网站,指向我们部署项目中指定的目录。上一篇我们已经将该项目添加到了CCNET中,所以以后我们每次提交代码后,MSBuild就会编译整个解决方案【当然也会编译部署项目】,如果编译成功,就会自动将最新的程序部署到我们网站上。这样就可以使网站和我们的开发实时保持同步,这只不是唯一的实现方法,其他还有很多可以实现这个功能的方法,大家可以在这里讨论和交流。

补充:
Microsoft Build Engine (MSBuild) Microsoft Visual Studio 的新的生成平台。MSBuild 在如何处理和生成软件方面是完全透明的,使开发人员能够在未安装 Visual Studio 的生成实验室环境中组织和生成产品。通过这几篇教程,我们可以看出,MSBuild的强大功能,如果希望理解更多关于MSBuild的信息,请查看这里http://msdn.microsoft.com/zh-cn/library/ms171451.aspx

如果你对我讲解的这些内容不熟悉,建议你从头开始看这个系列的教程:项目管理实践系列教程

 

分享到:
评论

相关推荐

    自动获取SVN代码并编译代码 以及自动部署方案

    3. **自动编译**:编译是将源代码转换成可执行程序的过程。一旦代码被获取,自动化脚本会调用编译器(如GCC、MSVC等),将源代码编译成目标代码。编译过程可以通过构建工具(如Make、Maven、Gradle或Visual Studio ...

    自动化_项目管理好文章

    在IT行业中,自动化和项目管理是两个至关重要的领域,它们对于提高工作效率,减少错误和确保项目的成功至关重要。这里,我们围绕“自动化”和“项目管理”这两个主题,结合提供的文件名称,来深入探讨相关的知识点。...

    自动获取svn代码并且编译发布

    标题和描述中提到的“自动获取svn代码并且编译发布”是一种常见的持续集成(CI)实践,它涉及自动化从版本控制系统获取源代码、构建应用程序、并进行发布的过程。以下是这个流程涉及的关键知识点: 1. **Subversion ...

    编译原理实验四 编译器自动生成工具

    `VisualStudio`的提及意味着实验可能在Windows环境下进行,利用Visual Studio的强大调试和项目管理功能来辅助实验。 实验报告`编译器自动生成工具实验报告.pdf`应详细记录了实验步骤、遇到的问题、解决方案以及实验...

    华为云DevCloud的DevOps项目管理实践.pptx

    华为云DevCloud的DevOps项目管理实践践行了Scrum/看板、大规模敏捷、DevOps等业界先进理念,通过实施流水线、服务独立发布、微服务独立发布等手段,实现了研发作业时间的缩短,版本级编译时间的缩短,版本构建成功率...

    sringboot项目自动化发布shell脚本

    总的来说,`springboot项目自动化发布shell脚本`是DevOps实践中一个基础但重要的环节,它能帮助开发团队高效地管理软件生命周期,提高软件的迭代速度和质量。通过学习和理解这些脚本的工作原理,开发者可以更好地...

    行业文档-设计装置-一种基于云计算的APP自动编译系统和管理平台.zip

    总的来说,这个压缩包中的文档很可能详细阐述了如何设计和实现这样一个基于云计算的APP自动编译系统和管理平台,涵盖了系统架构、工作流程、技术选型、实施策略等方面,对于理解现代软件开发的先进实践具有很高的...

    多项目管理编译运行(package、jar)的程序示例,包括Java项目源代码、编译和运行的脚本,全部打包在一起。可直接编译运行

    在IT行业中,多项目管理是常见的开发模式,特别是在大型企业级应用中。这个程序示例主要涉及了如何管理和编译多个Java项目,并将它们打包成一个可执行的JAR文件,便于部署和运行。以下是对这个主题的详细阐述: 1. ...

    msvc自动编译

    在持续集成的实践中,此类自动编译脚本能够显著提升团队协作效率与项目管理的自动化水平。它不仅减少了手动编译带来的重复劳动与潜在错误,还能够实时反馈代码状态,加速缺陷定位与修复过程。特别是在大型项目或频繁...

    自动编译系统升级说明

    1. 提升性能:自动编译系统升级通常会带来性能提升,包括更快的编译速度、更高效的资源利用,以满足日益增长的项目规模和复杂度。 2. 新特性和功能:新版本的自动编译系统可能会引入新的特性和工具,如更灵活的配置...

    编译原理及实践教程

    实践教程则侧重于将理论知识应用于实际项目,帮助学习者更好地理解和掌握编译器的设计与实现。 首先,我们从词法分析开始。这是编译器的第一步,也称为扫描或词法分解。它将源代码分解成一系列有意义的单元,称为...

    《编译原理及实践》电子书下载

    7.4.4 堆的自动管理 292 7.5 参数传递机制 292 7.5.1 值传递 293 7.5.2 引用传递 294 7.5.3 值结果传递 295 7.5.4 名字传递 295 7.6 TINY语言的运行时环境 296 练习 297 编程练习 303 注意与参考 304 第8章 代码生成...

    automake,autoconf编译大型项目例子

    在软件开发过程中,尤其是开源项目,automake和autoconf是两个非常重要的工具,它们帮助...通过对"automake,autoconf编译大型项目例子"的深入学习,开发者可以提升自己的项目管理技能,更好地应对复杂的软件工程挑战。

    操作系统实验及课程设计代码自动编译系统.zip

    操作系统实验及课程设计中的代码自动编译系统是一个高效且实用的工具,尤其在处理大量代码审查和测试时,能够显著提升工作效率。这个系统的核心功能是自动化编译过程,通过识别和处理不同编程语言的源代码文件,使得...

    每日编译的入门实践

    - `BuildTest.bat`:被`LoadTest.bat`调用的实际自动编译脚本 #### 三、BuildTest.bat实现思路 **3.1 参数说明** - **指定编译中间过程存放的盘符**:如`D:` - **指定每日编译存放的盘符**,可以是网络盘:如`E:` ...

    自动编译脚本编写指南 (2).pdf

    自动编译脚本编写指南 自动编译脚本编写指南是配置管理...自动编译脚本编写指南提供了简单编译和复杂编译两种对象的编写思路和实践例子,对于配置管理员、项目经理以及需要实施自动编译的相关人员具有重要的参考价值。

    补丁、打包编译后的文件,自动生成class、jsp、js等文件目录(附教程)

    阅读并按照教程操作,可以帮助你熟练掌握这个自动化工具,提升你的项目管理能力。 总的来说,补丁、打包和编译是软件生命周期中的核心环节,而自动化的工具则能显著提升开发效率。理解这些概念并熟练运用相关工具,...

    GNU Make项目管理[典藏版]加书签

    GNU Make作为项目管理工具的核心优势在于,它能够在源代码文件发生变化后自动检查时间戳,仅对那些发生变更的文件进行重新编译,从而提高了编译效率,避免了不必要的资源浪费。 GNU Make的广泛使用,尤其是其第三版...

    分布式编译icecream源码

    icecream的核心设计理念是有效地管理和协调多个客户端的编译工作,它由一个或多个调度服务器(scheduler)和多个客户端(worker)组成。调度服务器负责接收编译任务,分析任务需求,然后根据客户端的负载情况将任务...

    Java第三单元项目案例北大青鸟办公自动化管理系统下载资料

    **Java第三单元项目案例——北大青鸟办公自动化管理系统** 在Java编程的学习过程中,项目实践是...通过参与这样的项目,不仅可以提升技术能力,还能锻炼团队协作和项目管理的能力,为未来的职场生涯打下坚实的基础。

Global site tag (gtag.js) - Google Analytics