zoukankan      html  css  js  c++  java
  • 自动发布web应用程序或者网站

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

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

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

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

        

      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的开发环境。

        网站项目的命令行如下:

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

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

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

      1. C:\Windows\Microsoft.NET\Framework\v3.5\Msbuild.exe F:\download\MSBuildDemo\BFL.MSBuildDemo.WebApp\BFL.MSBuildDemo.WebApp.csproj /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 

      1. <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />  
      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可以简化发布。
      1. %windir%\system32\inetsrv\appcmd add app  /site.name:"Default Web Site" /path:/TestWeb /physicalPath:C:\SourceControl\Test\TestWeb\PollutantMonitor   

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

      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

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

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

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

      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

  • 相关阅读:
    支持向量机SVM知识点概括
    决策树知识点概括
    HDU 3081 Marriage Match II
    HDU 3572 Task Schedule
    HDU 4888 Redraw Beautiful Drawings
    Poj 2728 Desert King
    HDU 3926 Hand in Hand
    HDU 1598 find the most comfortable road
    HDU 4393 Throw nails
    POJ 1486 Sorting Slides
  • 原文地址:https://www.cnblogs.com/8090sns/p/2669693.html
Copyright © 2011-2022 走看看