如何防止在Azure网站制作中交换Azure webjobs< - >临时插槽

时间:2015-06-26 02:49: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不需要高度可用,我可以轻松地离线测试。

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

  5. 有一个related thread,但它假设webjob与一个网站同时部署,这不是我目前所拥有的。

    我非常喜欢网站和网络浏览器,但似乎与连续独立部署网络工具和网站相关的故事已被打破。

    真的很感激建议!

    由于

3 个答案:

答案 0 :(得分:28)

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是网站内容的一部分。
  3. 因此,当你交换插槽时,你实际上交换了网站文件,包括WebJob。

      

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

    要阻止WebJobs在暂存插槽上运行,您可以添加名为WEBJOBS_STOPPED的应用设置,并将其设置为1(在天蓝色门户网站中)。 (source)。确保此应用设置粘贴到广告位,否则它将传播到制作广告位。

答案 1 :(得分:4)

解决此问题的最简单方法是为您的Web作业提供单独的Web App。只需将Worker Web App放在同一个Azure服务计划上,您就可以在同一台计算机上运行两个独立的Web应用程序。

web应用程序 web应用程序工

答案 2 :(得分:1)

以下是Amit使用PowerShell对#3的回答,

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 $_ }