2014-07-01 19 views
13

我們有一個帶有「暫存」部署插槽的Azure網站設置,我們使用連續的Azure WebJob處理長時間運行的後臺作業。看起來,當您發佈到網站(幷包含WebJob二進制文件)時,如果WebJob先前已停止,WebJob將自行重新啓動。如何防止Azure WebJob在發佈後啓動?

我們當前的部署過程如下所示:

  1. 部署到分段
  2. 立即&快速停止 分期WebJob(儘量避免處理消息2個WebJobs)
  3. 煙霧測試在STAGING工作上驗證代碼
  4. 停止PRODUCTION WebJob(讓它排出隊列消息)
  5. 交換生產和分期
  6. 開始生產WebJob(這只是臨時WebJob)

有沒有竅門(比如一個標誌文件或東西)告訴WebJob不要發佈後啓動?

回答

18

要在停止狀態下部署連續WebJob,只需在WebJob(二進制文件)的根目錄中添加名爲disable.job的文件,這將告知框架WebJob當前已停止。

要查看此行爲,您可以簡單地停止連續的WebJob並查看該文件是否生成並放置在WebJob的目錄中。

+0

剛剛測試過這個,它效果很好。我在我的C#控制檯項目的根目錄中添加了一個'disable.job'文件,並將其構建操作設置爲'Content'。 – ericb

+0

@我可以發誓,直到最近,當一個網站發佈時,webjob的狀態將保持不變 - 如果停止了,保持它停止;如果它正在運行,請繼續運行。我發佈Web應用程序代碼和/或webjob代碼的新版本的事實不應被視爲框架的假設,即應該更改webjobs的運行狀態。僅供參考我發佈在這裏https://stackoverflow.com/questions/42380853/stopped-azure-webjobs-are-starting-following-publishing-of-web-app。 – Matt

0

AFAIK,沒有開箱即用的解決方案。但是,您可以設置應用程序設置,並在啓動時讓webjob代碼進行檢查。此外,您可以使用HTTP_HOST變量來確定環境。

+0

這是一個好主意,但如果您設置了連續作業運行,但實際上停止它而不是調用RunAndBlock(),則Azure應該在它關閉時重新啓動它。這個假設不正確嗎? – jsgoupil

12

您可以將應用程序設置WEBJOBS_STOPPED添加到您的臨時插槽並將其設置爲1。將此設置設置爲「插槽設置」,以便它不會與生產交換。

+0

這對我有效。更多信息:https://github.com/projectkudu/kudu/search?utf8=%E2%9C%93&q=IsWebJobsStopped –

+1

一旦你設置了這個,你可以檢查作業是否正在運行(「停止」)你的webjobs儀表板:https://yoursubdomain.scm.azurewebsites.net/azurejobs/ – sammy34

+0

這對我有用。應該被接受的答案IMO –

相關問題