如何防止在Azure网站生产< - >暂存插槽中交换Azure webjobs

San*_*dke 18 azure-web-sites azure-webjobs

我有一个Azure网站,其中包含一个包含多个实例的生产和临时插槽.

我在网站上运行了几个Azure webjobs,其中一些是触发其他连续的.

据我所知,触发的webjobs只能在一个实例上运行一次.

我目前的设置是:

  • 生产站点除了从分段交换之外没有其他部署

  • 暂存网站设置为从bitbucket持续部署

  • 使用"发布到Azure"将Webjobs从VS内部署到生产槽(因为AFAIK不支持基于计划的webjobs的连续部署)

  • 该网站的VS解决方案与包含webjobs的VS解决方案不同

我注意到当我交换生产和分期时,webjobs也被交换了!当我将新的webjob部署到生产中并随后进行网站部署然后进行交换时,我意识到了这一点,新部署的webjob不再位于生产槽中!

我的问题:

  1. 是否有可能阻止webjobs在生产和分期之间交换(webjobs实际上是完全不同的代码片段而不是网站)

  2. 什么是交换webjobs?二进制文件?时间表?两个?

  3. 如何阻止所有webjobs在临时插槽上运行?我的webjobs不需要高度可用,我可以轻松地离线测试它们.

  4. 如果我VS将webjobs部署到临时插槽并进行交换,那么当前的暂存插槽将缺少已部署的webjob,当我进行下一次网站更新时,我将丢失它,那么我应该在哪里部署我的webjobs?

有一个相关的线程,但它假设webjob与一个网站同时部署,这不是我目前的.

我真的很喜欢网站和webjobs,但似乎与连续独立部署webjobs和网站有关的故事被打破了.

真的很感激建议!

谢谢

Ami*_*ple 29

Azure网站部署插槽并不是一个易于理解的概念,与WebJobs一起使用起来有点困难.

我建议阅读以下帖子以更好地了解部署插槽 - http://blog.amitapple.com/post/2014/11/azure-websites-slots/(包括有用信息的评论部分)

要更好地了解WebJobs的工作和部署方式,请参阅此帖子 - http://blog.amitapple.com/post/74215124623/deploy-azure-webjobs/

重要的是要了解:

  1. 在交换部署插槽时,您实际上在2个插槽之间交换网站的内容/文件.
  2. WebJobs是网站内容的一部分.

因此,当你交换插槽时,你实际上交换了网站文件,包括WebJob.

请注意,直接部署WebJob是一种不好的做法,而不是作为网站文件/存储库的一部分,这可能是您遇到问题的原因.

要阻止WebJobs在登台槽上运行,您可以添加一个名为的应用程序设置WEBJOBS_STOPPED并将其设置为1(在azure门户中).(来源).确保此应用程序设置对插槽粘性的,否则它将传播到生产槽.


Nik*_*bin 6

迄今为止,解决此问题的最简单方法是为您的 Web 作业创建一个单独的 Web 应用程序。只需将 Worker Web 应用程序放在同一个 Azure 服务计划上,您就会在同一台机器上运行两个单独的 Web 应用程序。

web-app web-app-worker