Pergunta

Temos um site que publica eventos usando o NServiceBus. O site é implantado usando o msDeploy. Também temos o NServiceBus.exe, que deve ser executado como um serviço do Windows para se inscrever nesses eventos, e também gostaríamos de implantar isso.

Existe alguma maneira de empacotar o serviço e o site, para que ele possa ser instalado também? É possível empacotar separadamente para que possamos implantá -lo em outro servidor?

Quaisquer dicas sobre onde encontrar informações sobre como fazer isso seriam ótimas, pois podemos fazer implantações automatizadas para o site agora.

Foi útil?

Solução

Recentemente, fiz isso usando o msdeploy, phantom e instaltutil.exe

Você basicamente precisa modificar sua classe de instalador e elevar seus privilégios de serviço WMSVC remoto, se necessário.

Link para o blog

Outras dicas

O que acabamos fazendo foi criar uma camada de 'controlador' que coordena as tarefas de implantação, mesmo uma que poderia usar o MSDeploy. Essencialmente, o MSDeploy não é o nível mais alto de abstração em nosso sistema de implantação.

Optamos por usar o MSBuild para coordenar essas tarefas de implantar itens de um 'pacote'.

Em nosso processo de implantação, um aplicativo da Web implantado com o MSDeploy é apenas mais um item de implantação, assim como um serviço do Windows.

Em toda a divulgação, ainda não criamos tarefas de implantação do MSDEPLAPE, embora deva/caímos muito bem para o que já criamos, pois o MSBuild invocaria o MSDEPLAPE. Atualmente, usamos tarefas da comunidade MSBuild para automação de implantação do WebApp, coordenadas via MSBuild.

Você pode ler um pouco mais sobre como 'generalizamos' nossas implantações por meio de um post de blog que eu chamei "Panda - Automação de embalagem e implantação".

Aqui está uma linha CMD MSDeploy que eu costumava sincronizar um arquivado que é criado a partir de uma etapa pós-construção no meu Windows Service.proj Arquivo.

Ele está sincronizando do meu servidor de construção para o meu servidor de aplicativos em uma rede diferente. Eu tenho etapas de construção pré e post que iniciam e interrompem os serviços no servidor remoto. Você deve envolver o script do PowerShell em um script VB devido a um bug com o PowerShell e o MSDEPLOP. o -verbose A opção é muito útil.

Eu também tenho o script VBScript e PS1 abaixo. Cuidado com o sono VB e os tempos limite pré e pós msdeploy.

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

Script 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 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top