2010-10-29 31 views
24

Tenemos un sitio web que publica eventos utilizando NServiceBus. El sitio se implementa utilizando msdeploy. También tenemos el NServiceBus.exe que debe ejecutarse como un servicio de Windows para suscribirse a estos eventos, y nos gustaría implementarlo también.MSDeploy para instalar el servicio de Windows?

¿Hay alguna manera de empaquetar el servicio así como el sitio web, para que también pueda instalarse? ¿Es posible empacar por separado para que podamos implementarlo en otro servidor?

Cualquier consejo sobre dónde encontrar información sobre cómo hacer esto sería genial, ya que ahora podemos realizar implementaciones automáticas para el sitio web.

+0

yo estaría muy interesado en lo que vino a la solución de este. –

+0

Desafortunadamente nos quedamos sin tiempo para encontrar una solución, pero espero volver a este tema nuevamente pronto. – Andy

+1

Finalmente publiqué una publicación de blog sobre cómo terminamos haciendo esto: http://www.jamescrowley.co.uk/2011/09/05/deploying-windows-services-using-msdeploy/ –

Respuesta

5

poco me hicieron esto utilizando MSDeploy, Phantom y Installutil.exe

Sólo básicamente necesita modificar su clase instalador y elevar sus privilegios de servicio WMSVC remotas si es necesario.

Link to blog

4

Lo que terminamos haciendo fue crear una capa de "controlador" que coordina las tareas de implementación, incluso una que podría usar msdeploy. Básicamente, msdeploy no es el nivel más alto de abstracción en nuestro sistema de implementación.

Elegimos usar MSBuild para coordinar esas tareas de implementar elementos desde un 'paquete'.

En nuestro proceso de implementación, una aplicación web implementada con msdeploy es solo otro elemento de implementación, al igual que un servicio de Windows.

En toda divulgación, en realidad no hemos creado las tareas de implementación de msdeploy aún, aunque debería/debería estar a la altura de lo que ya hemos creado, ya que MSBuild invocaría el msdeploy. Actualmente utilizamos las tareas de la comunidad de MSBuild para la automatización de implementación de aplicaciones web, coordinadas a través de MSBuild.

Puede leer un poco más acerca de cómo 'generalizamos' nuestras implementaciones a través de una publicación de blog que llamé "PANDA - Packaging ANd Deployment Automation".

+0

¿Alguna vez has abierto? ¿Obtuviste tus cosas de PANDA? – vittore

+0

No, pero gracias por el interés! En este momento, piense que hay alternativas disponibles (incluso en Windows) para llenar ese espacio (chef, PowerShell DSC, Octopus Deploy), etc. –

4

Aquí es una línea MSDeploy cmd he usado para sincronizar un archivedir que se crea a partir de una etapa posterior a la generación en mi archivo Windows Service.proj.

Se está sincronizando desde mi servidor de compilación a mi servidor de aplicaciones en una red diferente. Tengo pasos de compilación previa y posterior que inician y detienen los servicios en el servidor remoto. Debe envolver el script de powershell en un script vb debido a un error con powershell y msdeploy. La opción -verbose es muy útil.

También tengo el script vbscript y ps1 a continuación. Tenga cuidado con la suspensión de VB y los tiempos de espera de pre y post aplicación.

msdeploy -verb:sync -source:archivedir=\\qa-xxxxx1.qa.lan\deployment\backups\FreddieMacDelivery\FreddieMacDelivery.zip,tempAgent='True',computerName=qa-xxxxx1.qa.lan,userName=QA\xxxxx,password=xxxx,authtype=NTLM,includeAcls='False' -dest:dirpath=\\qa-xxxxxx1.qa.lan\protk\Services\FreddieMacDelivery\1.4.1.test -useCheckSum -verbose -preSync:runCommand="cscript.exe c:\temp\stop_win_svc.vbs" -postSync:runCommand="c:\temp\start_win_svc.vbs",waitInterval=15000,waitAttempts=1 

escritura de VB:

Option Explicit 
Dim oShell, appCmd,oShellExec 
Set oShell = CreateObject("WScript.Shell") 

appCmd = "powershell.exe -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ""&c:/temp/Get_Win_SVC.ps1"" " 

Set oShellExec = oShell.Exec(appCmd) 

WScript.Sleep 1000 
oShellExec.StdIn.Close() 

script de PowerShell:

$username = 'QA\xxxxx' 
$password = 'xxxxx' 
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force)) 

(Get-WmiObject -computer qa-xxxx1.qa.lan -Credential $cred Win32_Service -Filter "Name='ProTeck.FreddieMac.DeliveryService'") 


$svc = (Get-WmiObject -computer qa-xxxxx1.qa.lan -Credential $cred Win32_Service -Filter "Name='ProTeck.FreddieMac.DeliveryService'") 

Write-Host $svc 

$svc.InvokeMethod("StartService", $null) 


(Get-WmiObject -computer qa-xxxxx1.qa.lan -Credential $cred Win32_Service -Filter "Name='ProTeck.FreddieMac.DeliveryService'")> c:\temp\win_stat_post.txt 
Cuestiones relacionadas