簡體   English   中英

(重新)部署代碼/ bin文件到(多個)Windows Azure虛擬機的方法

[英]Approaches for (re)deploying code/bin files to (multiple) Windows Azure Virtual Machines

這個問題可能與Azure虛擬機無關,但我希望Azure提供比Amazon EC2更簡單的方法。

我在多個Azure虛擬機上運行長期運行的應用程序(即不是Azure網站或[Paas]角色)。 它們是簡單的控制台應用程序/ Windows服務。 有時,我會進行代碼刷新,需要停止這些進程更新代碼/二進制文件 ,然后重新啟動這些進程

在過去,我曾嘗試使用PSTools( psexec )來遠程執行此操作,但這似乎是一種黑客攻擊。 有沒有更好的方法來遠程終止應用程序,刷新部署,並重新啟動應用程序?

理想情況下,Visual Studio中會有一個“ 發布控制台應用程序 ”等同於允許我將代碼部署為Azure網站,但我猜這是不可能的。

非常感謝任何建議!

有許多“正確”的方法來完成你的任務。

如果您正在運行Windows Azure應用程序 - 有一個簡單的MSDN指南。 但是,如果你必須使用常規控制台應用程序 - 你有一個問題。

Microsoft方式是使用WMI - 適用於遠程Windows服務器的任何類型管理的好技術。 我想WMI應該適合你的目的。

最后一種方法是:在每個Azure VM上安裝Git並編寫簡單的服務器端腳本,計划每5分鍾運行一次,以便從存儲庫更新代碼,構建它,終止舊進程並啟動新進程。 將更新發布到存儲庫,這就是全部。 絕對是破解,但它甚至適用於非Windows機器。

一種常見模式是在Windows Azure Blob存儲中存儲項目,例如命令行應用程序。 我經常這樣做(例如:我將所有MongoDB二進制文件存儲在blob中,壓縮,每個版本使用一個zip#)。 在VM啟動時,我有一個任務,將zip從blob下載到本地磁盤,解壓縮到本地文件夾,並啟動mongod.exe進程(這同樣適用於其他控制台應用程序)。 如果安裝更復雜,則需要使用MSI或其他類型的自動安裝程序。 將這些應用程序存儲在blob存儲中的兩件好事:

  • 減少部署包大小
  • 不再需要重新部署整個雲應用程序只是為了更改它的一個組件

更新控制台應用程序時:您可以將新版本上載到blob存儲。 現在,您有幾種方法可以通知我的VM進行更新。 例如:

  • 修改我的配置文件(也許我有一個鍵/值對引用我的應用程序名稱+版本號)。 當這改變時,我可以在我的web / worker角色中處理事件,允許我的代碼采取適當的行動。 此操作可能是停止exe,從blob中獲取新的,然后重新啟動。 或者......如果它比這更復雜,我甚至可以讓VM實例自行重啟,清除內存/臨時文件/等。 並干凈地開始一切。
  • 發送自己某種類型的命令來更新應用程序。 我可能會使用Service Bus隊列來執行此操作,因為我可以在“軟件更新”主題上擁有多個訂閱者。 每個實例都可以訂閱隊列,並且當更新消息顯示時,相應地處理它(可能該消息包含應用程序名稱和版本號,如配置中的鍵/值對)。 我也可以使用Windows Azure存儲隊列,但是我可能每個實例需要一個隊列(我不喜歡這個)。
  • 創建我的角色實例偵聽的某種類型的wcf服務,以便更新命令。 與Windows Azure隊列相同的問題:要求我找到一種方法將相同的消息推送到我的web / worker角色的每個實例。

這些都適用於獨立的exe(或xcopy-deployable exe)。 對於需要管理員級權限的MSI,這些需要通過啟動腳本運行。 在這種情況下,您可以進行配置更改事件,該事件將由您的角色實例處理(如上所述),但您只需重新啟動實例,允許它們通過啟動腳本運行MSI。

你可以

  1. 構建源並將包內容存儲在打包文件夾中
  2. 打包文件夾中的二進制文件生成並上載到Blob存儲中
  3. 使用PowerShell Remoting host軟件包下拉(並解壓縮)到遠程文件夾中
  4. 使用PowerShell Remoting host以根據需要從包內容 (即下載和配置)運行install.ps1

使用您的Enter-PSSession -ComputerName $env:COMPUTERNAME可以實現相同的方法,以便快速部署本地構建策略,這意味着您正在使用相同的策略來開發,生產和測試持續交付

您可以稍后(如果需要)進行的潛在優化是(對於本地構建)刪除步驟2和3,即假裝您已打包,上載,下載和解壓縮,並將包裝文件夾提供給您的install.ps1 as 遠程文件夾並在非遠程會話中以交互方式運行install.ps1

上述主題的一個常見變體是使用有效的文件傳輸和版本控制機制,例如git(或(shudder)TFS!),以實現“在構建結束時某處推送”和“在部署開始時拉動”部分練習(Azure網站提供內置的TFS或git端點,使每個'push'隱含地包含遠端的'pull')。

如果您的代碼是xcopy可部署的(並且復制了陰影),您甚至可以在git中擁有一個完整的應用程序映像,只需執行git pull來更新您的站點(使用或不執行由PowerShell Remoting執行install.ps1的第4步) )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM