使用Cruise Control .Net自动化部署.Net应用程序

7

我目前已经设置了CC.Net来进行构建,效果非常好。但现在我想要将其用于部署。我考虑在staging上安装CC.Net,在构建完成后自动上传并触发forcebuild触发器到staging,然后使用msbuild和必要的扩展来执行gac、安装服务等操作以完成安装。

我也看到了msdeploy,它似乎有类似的目标。你认为我的计划如何?你们都是如何进行自动化部署的呢?

注释

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

    • 可能这个端口参数是无效的。我以前设置过Samba共享,但从未使用过Active Directory,所以闭嘴听着。
  • 只有FTP、RDP和HTTP是开放的。

2个回答

6

Richard,我们不想在暂存或生产服务器附近放置CruiseControl。

对于LAN(即内部生产服务器),我们手动触发Production Deploy CC任务,停止IIS(站点和应用程序池),复制新站点并重启IIS相关内容。

对于DMZ部署(即互联网内容,不存在AD身份验证的连接),我们尽可能地在内部完成构建,并将结果压缩成ZIP文件,包括执行“最终步骤”的NAnt脚本。有一个内部的CC任务会执行所有这些操作,并将ZIP文件通过FTP传输到目标服务器。要完成该过程需要手动干预:远程登录到框中,解压缩然后运行NAnt以“完成”部署(停止/复制/启动/其他操作)。

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

' 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>

无论如何,可能有几十种方法来处理这个问题——对于我们来说,需要内部自动化/外部手动步骤的设置是有效的。


赞同自动上传的想法,但是最后一步仍需要手动登录到DMZ盒子中。 - CodingWithSpike

1

我同意Craig的观点,你不想在你的舞台服务器上使用CC.NET。我们从构建服务器完成所有工作,并将其推送到开发和舞台环境。使用MSBuild,我们为每个编译设置了目标,并将任何和所有部分推送到两个服务器或根据环境选择服务器组合。因此,构建服务器上的CC.net上的每个项目都对应于MSBuild中的一个或多个目标以及整体连续构建。


你可能想要更正以下内容:“你不想在构建服务器上使用CC.NET。” - Ryu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接