我目前正在进行CC.Net设置以进行构建,这非常棒。但是现在我想要一路走下去并将其用于部署。我正考虑在暂存时安装CC.Net,并在构建完成后自动加载启动forcebuild触发器进行暂存,并让它使用msbuild和gac的必要扩展,安装服务等。完成安装。
我也看过msdeploy似乎有类似的目标。您如何看待我的计划以及您如何进行自动部署?
注释
在暂存网络中禁用SMB(文件共享),这消除了psexec的可能性。它被禁用的原因是我们希望网络被锁定,当我询问开放时,我被告知需要打开太多端口。与身份验证有关吗?
仅打开FTP,RDP和HTTP
答案 0 :(得分:6)
理查德 我们不想把CruiseControl放在临时或生产服务器附近。
对于LAN(即内部生产服务器),我们手动触发了停止IIS(站点和应用程序池)的生产部署CC任务,复制新站点并重新启动IIS。
对于DMZ部署(即互联网内容,没有可能的AD-auth'd连接),我们尽可能多地在内部进行构建并对结果进行压缩,包括执行“最终步骤”的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>
无论如何,可能有很多方法可以解决这个问题 - 内部自动/外部手动步骤所需的设置对我们有效。
答案 1 :(得分:1)
我同意Craig,你不想在你的舞台服务器上使用CC.NET。我们做任何事情,从构建服务器和推送到开发。和舞台。使用MSBuild,我们为每个编译设置了目标,并根据环境将任何和所有部分推送到服务器或服务器组合。因此,构建服务器上CC.net上的每个项目都对应于MSBuild中的目标或tragets以及所有连续构建。