Azure web app service 如何防止Azure Web作业在Azure网站制作中被交换<--&燃气轮机;暂存槽

Azure web app service 如何防止Azure Web作业在Azure网站制作中被交换<--&燃气轮机;暂存槽,azure-web-app-service,azure-webjobs,Azure Web App Service,Azure Webjobs,我有一个Azure网站,有一个生产和暂存槽,有多个实例 我在该站点上运行了几个Azure WebJob,其中一些是被触发的,另一些是连续的 我知道触发的webjobs只能在一个实例上运行一次 我当前的设置是: 生产站点除了从暂存交换之外没有其他部署 暂存网站设置为从bitbucket连续部署 Webjobs是使用“发布到Azure”从VS内部部署到生产槽的(因为AFAIK不支持基于时间表的Webjobs的连续部署) 网站的VS解决方案与包含webjobs的VS解决方案不同 我注意到当我交换生

我有一个Azure网站,有一个生产和暂存槽,有多个实例

我在该站点上运行了几个Azure WebJob,其中一些是被触发的,另一些是连续的

我知道触发的webjobs只能在一个实例上运行一次

我当前的设置是:

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

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

  • Webjobs是使用“发布到Azure”从VS内部部署到生产槽的(因为AFAIK不支持基于时间表的Webjobs的连续部署)

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

我注意到当我交换生产和暂存时,WebJob也被交换了! 当我将一个新的webjob部署到生产环境中,并随后进行了网站部署,然后进行了交换时,我意识到了这一点,新部署的webjob不再位于生产环境中

我的问题是:

  • 是否可以防止WebJob在生产和登台之间交换(WebJob与网站的代码完全不同)

  • 用什么来交换webjobs?二进制文件?日程两者都有

  • 如何防止所有WebJob在临时插槽上运行?我的webjobs不需要高可用性,我可以轻松地进行离线测试

  • 如果我将webjobs部署到暂存槽并进行交换,则当前暂存槽将丢失已部署的webjob,并且在执行下一次网站更新时将丢失它,那么我应该将webjobs部署到何处

  • 有一个问题,但它假设webjob与一个我目前没有的网站同时部署

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

    非常感谢您的建议


    感谢

    Azure网站部署槽不是一个容易理解的概念,再加上WebJobs,它变得有点困难

    我建议阅读下面的文章以更好地了解部署槽(包括评论部分以获取有用信息)

    要更好地了解WebJobs是如何工作和部署的,请参阅本文-

    重要的是要了解:

  • 交换部署插槽时,实际上是在两个插槽之间交换网站的内容/文件
  • WebJobs是网站内容的一部分
  • 因此,当您交换插槽时,实际上是交换网站文件,包括WebJob

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

    要防止WebJobs在临时插槽上运行,您可以添加一个名为
    WebJobs\u STOPPED
    的应用程序设置,并将其设置为
    1
    (在azure门户中)。(). 确保此应用程序设置粘贴到插槽,否则它将传播到生产插槽。

    以下是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 $_ }
    

    到目前为止,解决这个问题最简单的方法是为您的Web作业使用一个单独的Web应用程序。只需将Worker Web应用程序放在同一Azure服务计划上,您将在同一台计算机上运行两个单独的Web应用程序

    网络应用
    web app worker

    感谢您的回复。我不知道直接部署WebJob是不好的,VisualStudioAzure集成实际上通过“发布到Azure”来鼓励它VS中WebJob项目中的按钮。看起来至少它不应该让遵循
    错误做法变得那么容易
    是否有地方可以向团队提供反馈?Git部署对我来说是一个巨大的胜利,它是WebJobs与CloudServices的较量。这稍微削弱了这个故事,因为这意味着需要重新部署网站来更新WebJob。“发布到Azure”对于WebJob和对于网站是一样的,有问题的做法是将git部署和“发布到Azure”(msdeploy)混合在一起,最好使用一种部署方法。明白了,你知道吗,如果我将所有的webjob添加到与我的网站(git部署)相同的VS解决方案中,当我提交webjob中的更改时,它是否会重新部署我的网站,即使唯一的更新是一个webjob?其他未更新的webjob呢?我担心如果它是一个包含所有webjobs和一个网站的单一解决方案,部署需要多长时间。它将构建web应用程序和webjobs,但只部署(复制)已更改的文件。@AmitApple,我正在使用设置为
    1
    webjobs\u STOPPED
    ,但它不会停止webjobs,它们仍在舞台上运行。你知道这是否真的有效吗?或者它是否显示为在门户中运行,但实际上并未运行?如果您没有任何/许多应用程序设置,这将非常有用。对我来说不幸的是,我大约有60岁。我不想记住保持两个应用程序设置在同步手动设置应用程序是一个非常危险的做法,考虑使用ARM模板自动化他们。对于这种情况下,我必须保持配置设置在两个地方。