Deployment 使用巡航控制.Net自动化.Net部署

Deployment 使用巡航控制.Net自动化.Net部署,deployment,msbuild,continuous-integration,cruisecontrol.net,Deployment,Msbuild,Continuous Integration,Cruisecontrol.net,我现在已经有了CC.Net的构建设置,这真是太棒了。但现在我想一直使用它进行部署。我正在考虑在登台时安装CC.Net,在生成完成并自动上载后,将forcebuild触发器触发到登台,并让它使用msbuild和gac的必要扩展,安装服务等。以完成安装 我也见过msdeploy,它似乎有类似的目标。你觉得我的计划怎么样?你们都是如何进行自动化部署的 注释 在临时网络中禁用SMB(文件共享),从而消除了psexec的可能性。它被禁用的原因是我们希望网络被锁定,当我问起要打开时,我被告知需要打开的端口

我现在已经有了CC.Net的构建设置,这真是太棒了。但现在我想一直使用它进行部署。我正在考虑在登台时安装CC.Net,在生成完成并自动上载后,将forcebuild触发器触发到登台,并让它使用msbuild和gac的必要扩展,安装服务等。以完成安装

我也见过msdeploy,它似乎有类似的目标。你觉得我的计划怎么样?你们都是如何进行自动化部署的

注释

  • 在临时网络中禁用SMB(文件共享),从而消除了psexec的可能性。它被禁用的原因是我们希望网络被锁定,当我问起要打开时,我被告知需要打开的端口太多。与身份验证有关吗

    • 这个端口参数可能是bunk。我以前设置过Samba共享,但我从未使用过Active Directory,所以我闭嘴倾听
  • 仅打开FTP、RDP和HTTP

    • 理查德, 我们不想让CruiseControl靠近暂存或生产服务器

      对于LAN(即内部生产服务器),我们已手动触发生产部署CC任务,这些任务将停止IIS(站点和应用程序池)、跨站点复制新站点并重新启动IIS

      对于DMZ部署(即,互联网内容,不可能有任何授权连接),我们尽可能多地在内部进行构建并压缩结果,包括执行“最后步骤”的NAnt脚本。有一个内部CC任务完成所有这些工作,并将ZIP发送到目标服务器。要完成此过程,需要手动干预:远程登录该框,解压缩,然后运行NAnt以“完成”部署(停止/复制/启动/任何操作)

      我不确定GAC,但IIS似乎可以通过.VBS文件控制

      ' Connect to the WMI WebAdministration namespace.
      Set oWebAdmin = GetObject("winmgmts:\\devserver.local\root\WebAdministration") 
      ' Specify the application pool.
      Set oAppPool = oWebAdmin.Get("ApplicationPool.Name='ProjectName'") 
      ' Stop the application pool.
      oAppPool.Stop
      ' now website; get the application website
      Set objWebSite = GetObject("IIS://localhost/W3SVC/7") ' id of web site
      ' get the app pool object for the websites app pool id
      Set objAppPool = GetObject("IIS://localhost/W3SVC/AppPools/ProjectName")
      'stop the site
      objWebSite.Stop()
      ' stop the app pool
      objAppPool.Stop()
      
      对于服务,我们通过NAnt使用
      psexec.exe

        <property name="Remote.Executor" value="${ToolsDir}\PSTools\psexec.exe" overwrite="false" />
        <!-- installs a particular windows service remotely from the command line -->
        <target name="installWindowsServiceRemote">
          <echo message="${Service.Install.Action}ing ${Service.Name} on ${Deploy.TargetServer}..." />
          <exec program="${Remote.Executor}">
            <arg line="\\${Deploy.TargetServer} ${Deploy.TargetFolder}\${Service.Name} /${Service.Install.Action}" />
          </exec>
        </target>
      
      
      

      无论如何,可能有几十种方法可以实现这一点——内部自动/外部手动步骤所需的设置对我们有效。

      我同意Craig的观点,你不希望舞台服务器上安装CC.NET。从构建服务器到推出,再到开发和阶段,我们无所不能。使用MSBuild,我们为每个编译设置了目标,并根据环境将任何和所有部分推出到两个服务器或服务器组合。因此,生成服务器上CC.net上的每个项目都对应于MSBuild中的一个或多个目标以及所有连续生成。

      您可能需要更正以下问题。。。“您不希望在构建服务器上使用CC.NET。”+1表示自动上传的想法,但这是必须实际登录DMZ框的手动“最后一步”。