自动发布web应用程序或者网站

来源:互联网 发布:网络fps游戏排行榜 编辑:程序博客网 时间:2024/06/11 15:21

由于需要自动化构建集成测试,所以需要一整套环境。

  关键 1根据源代码的改动自动下载代码,2编译3发布网站

   1第一步只需要通过CruiseControl.NET就可以做到

    2编译其实就是在ccnet.config中添加一个任务,关键代码  

  

[html] view plaincopy
  1. <tasks>  
  2.             <msbuild>  
  3.                 <executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Msbuild.exe</executable>  
  4.                 <workingDirectory>$(baseDirectory)$(workingDirectory)$(projectName)\src\PollutantMonitorPlatform\PollutantMonitor</workingDirectory>   
  5.                 <projectFile>$(baseDirectory)$(workingDirectory)$(projectName)\src\PollutantMonitorPlatform\PollutantMonitor\PollutantMonitor\PollutantMonitor.csproj</projectFile>  
  6.                 <buildArgs>/noconsolelogger /p:OutDir=C:\SourceControl\publish\PollutantMonitor\ /v:n</buildArgs>  
  7.                 <targets>Clean;Build;_CopyWebApplication</targets>  
  8.                  <timeout>900</timeout>  
  9.                  <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>  
  10.              </msbuild>   
  11.              <exec>  
  12.                 <executable>AddApp.bat</executable>  
  13.                 <baseDirectory>C:\Program Files\CruiseControl.NET\server</baseDirectory>  
  14.                 <buildArgs>PollutantMonitor 82 $(baseDirectory)TestWeb\PollutantMonitor "ASP.NET v4.0"</buildArgs>  
  15.                 <buildTimeoutSeconds>10</buildTimeoutSeconds>  
  16.            </exec>               
  17.         </tasks>  
  18.        <publishers>  
  19.            <xmllogger/>  
  20.              <buildpublisher>  
  21.             <sourceDir>$(baseDirectory)$(publishDirectory)PollutantMonitor\_PublishedWebsites</sourceDir>  
  22.             <publishDir>C:\SourceControl\Test\</publishDir>  
  23.             <useLabelSubDirectory>false</useLabelSubDirectory>  
  24.             <alwaysPublish>false</alwaysPublish>  
  25.          </buildpublisher>  
  26.       </publishers>  


通过应用msbuild.exe命令行就可以编译,不需要vs的开发环境。

  网站项目的命令行如下:

[html] view plaincopy
  1. C:\Windows\Microsoft.NET\Framework\v3.5\Msbuild.exe F:\download\MSBuildDemo1\MSBuildDemo.sln 
  2. /t:Clean;Build /p:OutDir=H:\testweb\  

   含义就是通过3.5版的Msbuild.exe编译路径F:\download\MSBuildDemo1下的solution文件MSBuildDemo.sln,首先清理,再生成,最后把生成的所有文件复制到目录下H:\testweb\

web应用程序项目的命令行如下:

[html] view plaincopy
  1. C:\Windows\Microsoft.NET\Framework\v3.5\Msbuild.exe 
  2. F:\download\MSBuildDemo\BFL.MSBuildDemo.WebApp\BFL.MSBuildDemo.WebApp.csproj
  3.  /t:Clean;Build;_CopyWebApplication /p:OutDir=H:\testweb\  

   含义就是通过3.5版的Msbuild.exe编译路径F:\download\MSBuildDemo\BFL.MSBuildDemo.WebApp\下的项目文件BFL.MSBuildDemo.WebApp.csproj ,首先清理,再生成,最后把生成的所有文件复制到目录下H:\testweb\

两种方式都在OutDir下生成了目录_PublishedWebsites,和通过vs右键发布生成的一样。

如何出现如下错误,需要修改csproj项目文件中的如下一行,需要改变版本,例如把v10.0改为v8.0或者v9.0 

[html] view plaincopy
  1. <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />  

[html] view plaincopy
  1.     C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets(133,11): error MSB4064: The "Retries" parameter is not supported by the "Copy" task. Verify the parameter exists on the task, and it is a settable public instance property.  
  2.   
  3. C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets(131,5): error MSB4063: The "Copy" task could not be initialized with its input parameters.   
  4. Done Building Project "F:\download\MSBuildDemo\BFL.MSBuildDemo.WebApp\BFL.MSBuildDemo.WebApp.csproj" (Clean;Build;_CopyWebApplication target(s)) -- FAILED.  
  5.   
  6. Build FAILED.  
  7.   
  8. "F:\download\MSBuildDemo\BFL.MSBuildDemo.WebApp\BFL.MSBuildDemo.WebApp.csproj" (Clean;Build;_CopyWebApplication target) (1) ->  
  9. (_CopyWebApplicationLegacy target) ->   
  10.   C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets(133,11): error MSB4064: The "Retries" parameter is not supported by the "Copy" task. Verify the parameter exists on the task, and it is a settable public instance property.  
  11.   C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets(131,5): error MSB4063: The "Copy" task could not be initialized with its input parameters.   
  12.   
  13.   
  14.     0 Warning(s)  
  15.     2 Error(s)  
  16.   
  17.   
  18. Time Elapsed 00:00:00.42  
  19.     
3发布网站到IIS下
  由于上一步已经生成了发布需要的所有文件,所以这一步就是拷贝文件,设定虚拟目录,就可以了。我使用的是II7,IIS7有一个工具appcmd可以简化发布。

[html] view plaincopy
  1. %windir%\system32\inetsrv\appcmd add app  /site.name:"Default Web Site" /path:/TestWeb
  2.  /physicalPath:C:\SourceControl\Test\TestWeb\PollutantMonitor   

  含义调用appcmd在Default Web Site下添加一个web应用程序,虚拟路径为TestWeb,物理路径为C:\SourceControl\Test\TestWeb\PollutantMonitor 

[html] view plaincopy
  1. %systemroot%\system32\inetsrv\APPCMD set app "Default Web Site/TestWeb" /applicationPool:"ASP.NET v4.0"  

 含义调用appcmd设置Default Web Site/TestWeb web应用程序的运行环境为ASP.NET v4.0

[html] view plaincopy
  1. %windir%\system32\inetsrv\appcmd delete app  "Default Web Site/TestWeb"   
 含义调用appcmd删除iis下的Default Web Site/TestWeb web应用程序

  通过一个bat文件自动添加应用程序和设置运行版本,文件内容如下:

  重复添加会有错误,目前就是忽略,还没有找到好的方法

[vb] view plaincopy
  1.   if exist %windir%\system32\inetsrv\appcmd.exe (goto AddWeb)  else (goto NOappcmd)   
  2.    :AddWeb   
  3.  echo 添加网站  
  4.  %windir%\system32\inetsrv\appcmd add site  /name:%1 /bindings:http/*:%2: /physicalPath:%3  
  5.    if %errorlevel% equ  0 goto success    
  6.    if %errorlevel% gtr  0 goto failed    
  7.   
  8.    :failed  
  9.   echo 获得错误返回码为%errorlevel%  
  10.       echo 添加网站failed  
  11.   goto end      
  12. :success         
  13.   echo 添加网站successed  
  14.   echo 获得返回码为%errorlevel%  
  15.   echo 设置dotnet版本,启动网站  
  16.    %systemroot%\system32\inetsrv\APPCMD set app %1"/" /applicationPool:%4  
  17.    %systemroot%\system32\inetsrv\APPCMD start site %1  
  18.  goto end  
  19.  :NOappcmd  
  20. echo %windir%\system32\inetsrv\appcmd.exe is not exist    
  21.   
  22. :end  


 需要注意的是以上命令需要有管理员的权限,否则就会出错

参考文章

使用 MSBuild 以特定的 NET Framework 为目标

MSBuild Task Reference

使用MSBuild自动编译发布你的ASP.NET应用程序

重启IIS命令行iisreset

如何使用 Appcmd.exe 命令行工具启用和配置 Internet Information Services 7.0 中的 HTTP 日志记录和其他功能

IIS(IISReset.exe)命令行

Create a Web Site (IIS 7)

Configuring-IIS-7-command-line-Appcmdexe

Getting Started with AppCmd.exe

出自:http://blog.csdn.net/xuexiaodong009/article/details/7473681

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝卖家被买家投诉卖假货怎么办 天猫三天未发货怎么办 天猫申请换货卖家不处理怎么办 天猫新疆不发货怎么办 天猫商城少发货怎么办 下单了卖家不发货怎么办 天猫超市漏发货怎么办 天猫购物几天不发货怎么办 天猫总是不发货怎么办 申请退款后卖家又发货了怎么办 天猫拍后申请退款卖家发货怎么办 淘宝上没下单却收到了货怎么办 被买家投诉三无产品怎么办 阿里巴巴卖家虚假发货怎么办 淘宝捡到便宜但是卖家不发货怎么办 被工商局查到三无产品怎么办 淘宝买到三无产品电器怎么办 天猫商城被投诉怎么办 床板有虫子咬人怎么办 微信充电话费充错怎么办 联通话费充多了怎么办 qq钱包充值要验证码怎么办 在微信qq币充错账号怎么办 微信qq币充错了怎么办 魅蓝e玩游戏卡怎么办 魅蓝5玩游戏卡怎么办 微信qb充错号了怎么办 支付宝qb充错号了怎么办 手机上q币充错了怎么办 q币数值充错了怎么办 微信充值商户电话是假了怎么办 微信冲话费冲错了怎么办 淘宝退款不退邮费怎么办 淘金币买的退款怎么办 淘宝退款不退运费怎么办 拼多多不退运费怎么办 开发商不退团购服务费怎么办 支付宝话费充错了怎么办 电视版本低不支持投屏怎么办 绝地求生刺激战场不支持机型怎么办 手机不支持微信运动怎么办