我對PowerShell並不是很熟悉,但是從我對shell的所有經驗來看,你都是流水線命令。管道字符之前的每個集合(|)表示一個將其結果傳遞給管道中的下一個命令(管道字符之後的命令)的單個命令。而且由於在解體完全完成之前您正在執行這些命令,這就是爲什麼您將新部署的應用程序交換到生產插槽。
這裏首先要注意的是,你只有最後一個命令的參數「-WaitToComplete」,它實際上是Get-OperationStatus。
我看到的其他事情是,這個powershell命令只會做VIP交換。怎麼樣部署?
從您描述的內容看,您的構建服務器自動部署到分段,並且您具有執行交換腳本的構建後事件。如果你的流量是這樣的話,麥克埃裏克森在這裏提出的建議是有道理的 - 在depoloy之後立即交換到舞臺。如果您打算在不檢查應用程序運行狀況的情況下進行交換,那麼爲什麼要部署到分段?不過,我不會建議直接depolyment到服務器(刪除+部署),但服務升級。因爲當我們進行服務升級時,我們的部署會保留其公共IP地址。如果我們刪除+部署,我們會得到一個新的公共IP地址。而託管服務的公共IP地址已被保證不被更改,直到部署被刪除。
最後,您應該擴展一下您的PowerShell腳本。首先包括一個例程,它將檢查(並等待直到)準備好插槽,然後執行交換。正如我所說,我沒有太多的PowerShell,但我相信這是可行的。
只是我2美分。
UPDATE
重溫this guide後,現在我明白了什麼。您正在等待操作完成,但這是您正在等待完成的VIP-SWAP操作。如果您的陳述式部署尚未準備就緒,則必須等待它做好準備。也像邁克提到,有可能是DNS延遲,這是在guide結束指出:
注:
如果不久後它的推廣參觀生產現場,DNS 名字可能沒有準備好。如果遇到DNS錯誤(404),請等待 幾分鐘後重試。請記住,Windows Azure會動態創建DNS 名稱條目,並且更改可能需要幾分鐘的時間才能傳播。
更新2
那麼,你將不得不查詢所有的角色和他們所有的實例,並等待他們都準備好了。技術上你可以進行VIP交換,每個角色至少準備一個實例,但我認爲這會使腳本更加複雜。
我需要這個,因爲我使用一個自動構建部署到Azure的 – 2012-02-17 18:06:18