Ричард,
мы не хотели размещать CruiseControl рядом с промежуточными или производственными серверами.
Для локальной сети (т. Е. Внутренних производственных серверов) мы вручную запускали задачи Production Deploy CC, которые останавливают IIS (сайты и пулы приложений), копируют новый сайт и перезапускают компоненты IIS.
Для развертываний DMZ (т. Е. Для Интернета, соединения AD-auth невозможны) мы делаем столько сборок, сколько можем внутренне и архивируем результаты, включая скрипт 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()
Для услуг мы используем psexec.exe
через NAnt
<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>
В любом случае, возможно, есть десятки способов подойти к этому - у нас работает внутренняя автоматизированная / внешняя ручная пошаговая настройка.