2015-06-26 40 views
16

我有一個帶有多個實例的生產和臨時插槽的Azure網站。如何防止在Azure網站生產中交換Azure webjobs <-->分段插槽

我在網站上運行了幾個Azure webjobs,其中一些觸發了其他連續的webjobs。

我明白觸發的webjobs只會在一個實例上運行一次。

我目前的設置是:

  • 生產現場沒有比從登臺

  • 分期的網站交換其他部署是建立以持續部署從到位桶

  • Webjobs從內部署VS發佈到使用「發佈到Azure」的製作槽(因爲AFAIK不支持基於時間表的網頁作業的連續部署)

  • 的網站的VS解決方案是從含VS解決方案不同webjobs

我注意到,當我換的生產和分期,webjobs也換! 我意識到這一點時,我已經部署了一個新的webjob生產,隨後進行網站部署,然後進行交換,新部署的webjob不再處於生產槽中!

我的問題:

  1. 是可以防止webjobs從生產之間的交換和分期(webjobs真的完全不同的代碼片段不是網站)

  2. 到底是換了webjobs什麼?二進制文件?時間表?兩者?

  3. 我該如何阻止所有webjobs在臨時插槽上運行?我的網絡作業不需要高度可用,我可以輕鬆地在線下測試它們。

  4. 如果我VS將webjobs部署到插槽並進行交換,那麼當前的臨時插槽將缺少部署的webjob,當我執行我的下一個網站更新時我將丟失它,因此我應該在哪裏部署我的網絡工作?

有一個related thread,但它假定webjob與一個網站,是不是我有什麼目前同時部署。

我真的很喜歡網站和webjobs,但它似乎與連續獨立部署webjobs和網站有關的故事被打破。

真的會很感激的建議!

感謝

回答

23

Azure的網站部署插槽並不是一件容易的概念來理解,與WebJobs在一起就變得更加困難一點。

我建議您閱讀下面的帖子得到有關部署插槽更好的理解 - http://blog.amitapple.com/post/2014/11/azure-websites-slots/(包括有用信息的評論部分)

要獲得WebJobs如何工作更好地瞭解和部署看到這個帖子 - http://blog.amitapple.com/post/74215124623/deploy-azure-webjobs/

重要的是要認識到:

  1. 當交換部署插槽你實際上交換兩個插槽之間的網站的內容/文件。
  2. WebJobs是網站內容的一部分。

因此,當您更換插槽時,您實際上會交換包括WebJob在內的網站文件。

請注意,直接部署WebJob而不是作爲網站文件/存儲庫的一部分是一種糟糕的做法,這可能是您遇到的問題的原因。

爲了防止WebJobs從您可以添加一個名爲WEBJOBS_STOPPED一個應用程序設置,並將其設置爲1(在蔚藍的門戶網站)的升級插槽運行。 (source)。確保這個應用程序設置爲粘到插槽,否則它會傳播到生產插槽。

+0

感謝您的迴應阿米特。 我不知道直接部署一個WebJob是不好的做法,Visual Studio Azure集成實際上鼓勵它在VS中的WebJob項目中使用「發佈到Azure」按鈕。看起來至少它不應該讓它很容易遵循'壞習慣' 有什麼地方可以向團隊提供反饋? Git部署對於WebJobs和CloudServices來說是一個巨大的勝利。 這會稍微削弱故事,因爲這意味着需要重新部署網站來更新WebJob。 –

+0

「發佈到Azure」的WebJob與網站相同,問題的做法是將git部署和「發佈到Azure」(msdeploy)混合在一起,最好使用一種部署方法。 –

+0

明白了,你知道我是否將我所有的webjobs添加到與我的網站(這是git部署)相同的VS解決方案中,當我在webjob中進行更改提交時,是否會重新部署我的網站只有更新是一個webjob?那些尚未更新的其他webjobs呢?我擔心部署將花費多長時間,如果它的一個整體解決方案與所有webjobs和網站。 –

1

這裏是Amit的答案#3使用PowerShell中,

Function Disable-AzureSlotJobs($SiteName, $Slot = 'staging') 
{ 
    $site = Get-AzureWebsite -Name $SiteName -Slot $Slot 
    $site.AppSettings.WEBJOBS_STOPPED = "1" 
    Set-AzureWebsite -Name $SiteName -Slot $Slot -AppSettings $site.AppSettings 
    Set-AzureWebsite -Name $SiteName -SlotStickyAppSettingNames @("WEBJOBS_STOPPED") 
} 

'MySite1', 'MySite2', 'MySite3' | % { Disable-AzureSlotJobs $_ } 
2

的迄今爲止最簡單的解決這個問題是有一個單獨的Web應用程序爲您的Web工作。只需將Worker Web App放在相同的Azure服務計劃中,您就可以在同一臺計算機上運行兩個單獨的Web Apps。

web應用程序 web-app的工人

+1

如果您沒有任何/許多應用程序設置,這很有用。不幸的是,對於我來說,我已經達到了60個左右。我不想記得同時保持兩個應用程序設置同步 – viggity

+0

手動設置應用程序設置是一個非常冒險的做法,請考慮使用ARM模板自動化它們。 –