[英]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 Blob存儲中存儲項目,例如命令行應用程序。 我經常這樣做(例如:我將所有MongoDB二進制文件存儲在blob中,壓縮,每個版本使用一個zip#)。 在VM啟動時,我有一個任務,將zip從blob下載到本地磁盤,解壓縮到本地文件夾,並啟動mongod.exe進程(這同樣適用於其他控制台應用程序)。 如果安裝更復雜,則需要使用MSI或其他類型的自動安裝程序。 將這些應用程序存儲在blob存儲中的兩件好事:
更新控制台應用程序時:您可以將新版本上載到blob存儲。 現在,您有幾種方法可以通知我的VM進行更新。 例如:
這些都適用於獨立的exe(或xcopy-deployable exe)。 對於需要管理員級權限的MSI,這些需要通過啟動腳本運行。 在這種情況下,您可以進行配置更改事件,該事件將由您的角色實例處理(如上所述),但您只需重新啟動實例,允許它們通過啟動腳本運行MSI。
你可以
host
將軟件包下拉(並解壓縮)到遠程文件夾中 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.