我有一个Azure网站,其中包含一个包含多个实例的制作和暂存插槽。
我在网站上运行了几个Azure webjobs,其中一些是触发其他连续的。
我理解触发的webjobs只能在一个实例上运行一次。
我目前的设置是:
生产站点除了从暂存交换
暂存网站设置为从bitbucket继续部署
使用"发布到Azure"将Webjobs从VS内部署到生产槽。 (因为AFAIK不支持连续部署基于时间表的webjobs)
该网站的VS解决方案与包含webjobs的VS解决方案不同
我注意到当我交换生产和分期时,webjobs也被交换了! 当我将新的webjob部署到生产中并随后进行网站部署然后进行交换时,我意识到了这一点,新部署的webjob不再出现在生产槽中了!
我的问题:
是否有可能阻止webjobs在制作和分期之间交换(webjobs与网站完全不同的代码片段)
为webjobs交换了什么?二进制文件?时间表?两个?
如何阻止所有网络广告在暂存广告位上运行?我的webjobs不需要高度可用,我可以轻松地离线测试。
如果我VS将webjobs部署到临时插槽并进行交换,那么当前的暂存插槽将缺少已部署的webjob,当我进行下一次网站更新时,我将丢失它,那么应该在哪里我正在部署我的webjobs?
有一个related thread,但它假设webjob与一个网站同时部署,这不是我目前所拥有的。
我非常喜欢网站和网络浏览器,但似乎与连续独立部署网络工具和网站相关的故事已被打破。
真的很感激建议!
由于
答案 0 :(得分:28)
Azure网站部署插槽并不是一个易于理解的概念,与WebJobs一起使用会更加困难。
我建议阅读以下帖子以更好地了解部署位置 - http://blog.amitapple.com/post/2014/11/azure-websites-slots/(包括有用信息的评论部分)
要更好地了解WebJobs的工作和部署方式,请参阅此帖子 - http://blog.amitapple.com/post/74215124623/deploy-azure-webjobs/
了解这一点非常重要:
因此,当你交换插槽时,你实际上交换了网站文件,包括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 $_ }