【问题标题】:Automating .Net deployment using Cruise Control .Net使用 Cruise Control .Net 自动化 .Net 部署
【发布时间】:2009-04-02 21:38:29
【问题描述】:

我目前已经安装了 CC.Net 来进行构建,它很棒。但现在我想一路走下去,也将它用于部署。我正在考虑在暂存和构建完成后安装 CC.Net,它会自动上传触发 forcebuild 触发器到暂存,并让它使用 msbuild 和 gac 的必要扩展,安装服务等。完成安装。

我也见过似乎有类似目标的 msdeploy。您如何看待我的计划以及你们都如何进行自动化部署?

注意事项

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

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

【问题讨论】:

    标签: deployment msbuild continuous-integration cruisecontrol.net


    【解决方案1】:

    理查德, 我们不想将 CruiseControl 放在临时或生产服务器附近的任何地方。

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

    对于 DMZ 部署(即互联网的东西,没有 AD 身份验证的连接可能),我们在内部进行尽可能多的构建并将结果压缩,包括执行“最后步骤”的 NAnt 脚本。有一个内部 CC 任务可以完成所有这些工作,并将 ZIP 通过 FTP 发送到目标服务器。要完成该过程需要手动干预:远程登录到盒子,解压缩然后运行 ​​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>
    

    无论如何,可能有几十种方法可以解决这个问题 - 内部自动化/外部手动步骤所需的设置对我们有用。

    【讨论】:

    • +1 表示自动上传的想法,但手动“最后一步”必须物理登录到 DMZ 框。
    【解决方案2】:

    我同意 Craig 的观点,您不希望在舞台服务器上使用 CC.NET。我们做从构建服务器和推送到开发的所有工作。和舞台。使用 MSBuild,我们为每个编译设置了目标,并将任何和所有部分推送到两个服务器或服务器组合,具体取决于哪个环境。因此,构建服务器上 CC.net 上的每个项目都对应于 MSBuild 中的一个目标或 tragets 以及所有连续构建。

    【讨论】:

    • 您可能需要更正以下内容...“您不希望在构建服务器上使用 CC.NET。”
    猜你喜欢
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 2013-03-09
    • 1970-01-01
    • 2010-09-09
    • 2013-01-02
    相关资源
    最近更新 更多