2010-08-02 67 views
4

我正在尋找一種方法來將拉部署設置爲與Windows下的傳統推送部署模型相同。在Windows環境中部署拉伸

最理想的情況應該是:

  • 部署文件(S)到主服務器
  • 子級服務器會檢查是否主在給定的時間或時間間隔有一個更新。
  • 如果主服務器包含一個更新,那麼它會下載更新和/或執行一個腳本(類似惡性?)

的解決方案需要重量儘可能輕,必須下運行Windows環境。

我看了一下ChefSmartFrog,但不適合這種特殊情況。

編輯:正在部署多個軟件。這些是數據庫腳本,Windows服務和一個網站。每個孩子都會擁有自己獨特的腳本,因爲它的要求和認證細節與其他方面不同。

編輯2: 到目前爲止,人們紛紛拿出偉大的答案,但最終的解決方案確實需要確保安全,內部運行,所有發生在同一時間。這是由於合規性,行業法規和版本問題(例如db服務器與服務不同步)。我想到的最終解決方案就像主服務器上的FPT服務器,以及運行在子服務器上以執行安裝例程(啓動,停止服務,安裝SQL腳本,記錄安裝)的Nant。這是目前可用的最接近的東西,但並不理想,因爲nant在推送的基礎上工作(只有在某人或程序(例如,cruisecontrol)運行腳本時才執行)。我確定必須有一個解決方案來爲Windows進行適當的PULL部署。如果您可以同時在多臺服務器上部署,則Linux上的Windows更新和APT是拉部署的很好例子。

+0

什麼Windows版本是子和主服務器? – jpg 2010-08-12 07:38:18

+0

它們都是相同的版本 - Server 2008標準版本,在我們的生產站點中是Server 2008 R2標準。 – Mike737 2010-08-13 04:05:24

+0

你想要它是安全的,但你使用FTP?我正確閱讀這個嗎? – Darknight 2010-08-14 13:21:46

回答

0

我對於要部署的應用程序類型並非100%清楚 - 但如果這是Windows Forms應用程序分發給客戶端/最終用戶,那麼您已查看ClickOnce?這有自動輪詢和從客戶端拉下增量的模式。但似乎你正在分發到其他服務器?

+0

我真的不認爲ClickOnce可能會削減它。我已經添加了更多關於正在部署的軟件的問題。 – Mike737 2010-08-02 23:32:53

0

幾年前,我已經實現了一個系統,可以解決您所尋找的問題。

對於客戶端應用程序,我們使用ClickOnce部署,這很好用。對於Windows服務和網站,我們必須實施我們自己的系統,因爲我們找不到任何適合我們的東西。

對於我們嘗試複製的數據庫(sql2005)來說,這並沒有得到很好的處理和處理能力。我們選擇進行備份和恢復數據(這是所有隻讀客戶端服務器上)

簡而言之

1)主服務器將舉行幾個zipfiles與web服務,網站和數據庫的新版本。

2)客戶端服務器windows服務每日掃描主服務器(使用ftp)以獲得新版本的軟件。

3)當發現它會 - 卸載Windows服務和替換文件,然後重新安裝 - 替換網站上的文件 - 替換數據庫

+0

不幸的是,我真的不興趣建立自己的。對我們來說,構建,支持和維護工作太多了。 這真的很煩人,因爲我有一個使用MSBuild,PSExec,NcFTP和其他一些方法的推送部署,它的工作原理非常完美。只是我們不能放棄PSExec和開放服務和端口的工具到我們的子/目標服務器環境中。 – Mike737 2010-08-13 04:10:18

0

的Windows Live同步

你有沒有想到Windows Live Sync?

它的免費,你所要做的就是設置兩個文件夾。一個在主服務器上,另一個在你的子服務器上。

設置完成後,所有文件將自動同步。

更新應該是非常簡單的,一旦你更新你的主文件夾,它會自動複製到孩子結束。

這完全是火,忘了。

我使用這個系統(一個部署在服務器上)和六個「子」節點,每天輕鬆同步1000個文件。

編輯1:

忘記提到,文件被加密,並且它使用反向連接,所以零路由器/防火牆的配置。

+0

有些服務器有網絡連接,有些服務器不具備網絡連接,而只有短暫突發時間的服務器纔是安全的環境。另外安裝例程需要在每臺機器上本地運行。 Windows服務需要停止,更新並重新啓動,否則您無法進行更新。數據庫服務器需要下載SQL腳本並根據正確的數據庫執行它們。 另一個問題是它不需要從任何地方都可以訪問,否則我們會失敗併購和安全審計。儘管我很確定我們可能會添加緩解例程,但它的額外工作。 – Mike737 2010-08-14 05:14:00

0

是否同步運行域控制器?所以你可以只是「宣傳」他們?沒有那麼輕。修改此路線以查看UI,但它也應該可以編寫腳本 - 在PowerShell中至少需要腳本。

「C:\ Windows \ SysWOW64 \ rundll32.exe」「C:\ Windows \ SysWOW64 \ shell32.dll」,#44「C:\ Windows \ SysWOW64 \ CCM \ SMSRAP.cpl」,運行播發程序

+0

沒有域控制器。 – Mike737 2010-08-14 05:07:10

+0

那麼現在是時候運行這個dcpromo :-)嚴重的是,你已經支付了所有的基礎設施,所以你會更好地使用它,而不是試圖重新發明輪子,就像你在一些窮人的Linux上farm :-)您可以使用BITS傳輸更新(數據的背景移動沒有比這更輕),您仍然可以選擇讓它們在現場安裝或等待預定時間。 Windows服務器場通常會傳播正常更新(每個盒子都可以有單獨的更新窗口)。 – ZXX 2010-08-14 21:33:03

0

我已經使用巡航控制.net和顛覆的組合來實現這一確切用法,並取得了很大的成功。

Subversion是安全的,將作爲主服務器。巡航控制.net完全支持subversion和nant。當然,它可以做更多。由於我們所處的行業及其要求(實用),我們過去擁有非常複雜的邏輯。

0

我以前在聖路易斯與他人談論他們的網站的「生日聚會」時曾經聽說過這種情況。我想知道那是否是你。

無論如何,我會使用Web Deployment Tool (MSDeploy)這個。 MSDeploy更像是一個同步工具,然後是其他任何東西。這個概念是你有一個源和一個目標,你想同步它們。如果您正在進行正常的推送部署,您的構建服務器會將某個構建的輸出與每個目標服務器同步。如果你想做一個pull部署,只需將你想要的文件放到一個共享位置(你調用這個主服務器),那麼你的客戶機就可以將它自己同步到該主服務器。

下面是一些你在你的問題中提到的詳細信息:

部署文件掌握服務器 您構建服務器可以使用MSDeploy部署文件掌握服務器

子級服務器會檢查查看主人是否在給定的時間或時間間隔有更新。 對此沒有直接的支持,但這裏真的有兩件事。 第一個問題:您可以從腳本(.cmd/PowerShell/MSBuild/etc)中運行MSDeploy,它可以確定是否有更新的版本。我會通過在輸出文件夾的頂層放置一個版本文件來實現這一點。然後,當您的腳本開始時,只需讀取服務器上的版本即可。如果有新的部署可用,則啓動新的部署。 第二件事:MSDeploy支持增量部署,所以即使您啓動了新的部署,它也不會做任何更改。當你開始談論數據庫部署時,這很棘手,儘管如此,在你的情況下可能不太明智,我會帶着的某種風格去做一件

如果主服務器包含一個更新,那麼它會下載更新和/或執行一個腳本 這是msdeploy.exe會爲你做。

其他相關項目

  • 增量發佈:如果您的網絡中包含1000個文件,但只有5個改變,那麼只有那些5 GET部署
  • 定製:MSDeploy支持參數化,客戶端啓動,這樣當同步您可以提供該客戶端的特定值。有了這些,您可以更改所有類型的文件,包括web.conig/.xml文件/文本文件等。您甚至可以提供自定義IIS設置
  • 身份驗證:如果您使用的是IIS 7,則可以使用正常的Windows身份驗證,您可以創建WMSvc用戶並使用它們。
  • 安全:WMSVC可用於本

這是否滿足您的需求?

1

你說你想做Windows軟件部署,但是你會談論構建腳本語言,比如NAnt。如果是我,我會使用InstallShield編寫Windows Installer軟件包,並利用它的UpdateManager服務讓客戶端從更新服務器獲取更新。這些工具已經存在了很長時間,並且證明了這些工具的可靠性遠高於您重新創建的任何內容。

+0

你有任何支持文檔或演示的鏈接 – Mike737 2010-08-16 08:46:57