2010-10-29 69 views
24

Chúng tôi có trang web xuất bản sự kiện bằng NServiceBus. Trang web được triển khai bằng cách sử dụng msdeploy. Chúng tôi cũng có NServiceBus.exe nên chạy như một dịch vụ Windows để đăng ký các sự kiện này và chúng tôi cũng muốn triển khai nó.MSDeploy để cài đặt dịch vụ windows?

Có cách nào để đóng gói dịch vụ cũng như trang web để có thể cài đặt được không? Có thể gói riêng để chúng tôi có thể triển khai nó đến máy chủ khác không?

Bất kỳ mẹo nào về nơi tìm thông tin về cách thực hiện việc này sẽ tuyệt vời, vì chúng tôi có thể thực hiện triển khai tự động cho trang web ngay bây giờ.

+0

tôi sẽ rất quan tâm đến giải pháp những gì bạn đã đến về vấn đề này. –

+0

Thật không may, chúng tôi đã hết thời gian để tìm một giải pháp, nhưng tôi hy vọng sớm trở lại chủ đề này. – Andy

+1

Cuối cùng tôi đã đăng một bài đăng trên blog về cách chúng tôi kết thúc việc này: http://www.jamescrowley.co.uk/2011/09/05/deploying-windows-services-using-msdeploy/ –

Trả lời

5

Gần đây tôi đã làm điều này bằng MSDeploy, Phantom và installUtil.exe

Bạn chỉ cần cơ bản cần phải sửa đổi lớp cài đặt của bạn và nâng cao đặc quyền dịch vụ wmsvc từ xa của bạn nếu cần thiết.

Link to blog

4

Điều chúng tôi làm là tạo ra một lớp 'bộ điều khiển' phối hợp các nhiệm vụ triển khai, thậm chí một công cụ có thể sử dụng msdeploy. Về cơ bản, msdeploy không phải là mức trừu tượng cao nhất trong hệ thống triển khai của chúng tôi.

Chúng tôi đã chọn sử dụng MSBuild để phối hợp các nhiệm vụ triển khai các mục từ 'gói'.

Trong quy trình triển khai của chúng tôi, một ứng dụng web được triển khai với msdeploy chỉ là một mục triển khai khác, giống như một dịch vụ Windows.

Trong tất cả các tiết lộ, chúng tôi chưa thực sự tạo các tác vụ triển khai msdeploy, mặc dù nó sẽ/sẽ giảm độc đáo với những gì chúng tôi đã tạo, vì MSBuild sẽ gọi msdeploy. Chúng tôi hiện đang sử dụng các tác vụ cộng đồng MSBuild cho tự động hóa triển khai webapp, được phối hợp thông qua MSBuild.

Bạn có thể đọc thêm một chút về cách chúng tôi 'tổng quát' triển khai của chúng tôi qua bài đăng trên blog mà tôi đã gọi là "PANDA - Packaging ANd Deployment Automation".

+0

bạn đã từng mở có nguồn gốc PANDA của bạn? – vittore

+0

Không, nhưng cảm ơn bạn đã quan tâm! Tại thời điểm này, hãy nghĩ rằng có sẵn các lựa chọn thay thế (ngay cả trên Windows) để lấp đầy không gian đó (đầu bếp, PowerShell DSC, Octopus Deploy), v.v. –

4

Đây là một dòng msdeploy cmd tôi đã sử dụng để đồng bộ hóa một archivedir được tạo ra từ một hậu xây dựng bước trong tập tin Windows Service.proj tôi.

Nó đang đồng bộ hóa từ máy chủ xây dựng của tôi với máy chủ ứng dụng của tôi trên một mạng khác. Tôi có các bước xây dựng trước và sau để bắt đầu và dừng các dịch vụ trên máy chủ từ xa. Bạn phải bọc kịch bản lệnh PowerShell trong tập lệnh vb do lỗi với PowerShell và msdeploy. Tùy chọn -verbose rất hữu ích.

Tôi cũng có tập lệnh vbscript và ps1 bên dưới. Hãy cẩn thận với giấc ngủ VB và thời gian chờ msdeploy trước và sau.

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 

VB script:

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() 

Powershell kịch bản:

$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 
Các vấn đề liên quan