Как предотвратить использование веб-сайтов Azure на сайте Azure ↔ промежуточных слотов
У меня есть сайт Azure с производственным и промежуточным слотом с несколькими экземплярами.
Я запускаю несколько веб-сайтов Azure на сайте, некоторые из которых запускают другие, которые являются непрерывными.
Я понимаю, что запущенные webjobs будут запускаться только один раз на одном экземпляре.
Моя текущая настройка:
-
Производственный сайт не имеет никакого развертывания, кроме того, что он меняет местами
-
Веб-сайт для установки настроен на непрерывное развертывание из битбакета
-
Webjobs развертываются из VS в производственный слот, используя "publish to Azure" (поскольку AFAIK не поддерживает непрерывное развертывание webjobs, основанных на расписании)
-
Решение VS для сайта отличается от решения VS, содержащего webjobs
Я заметил, что когда я меняю производство и постановку, webjobs также меняются местами!
Я понял это, когда я развернул новый webjob для производства, а затем сделал развертывание веб-сайта, а затем своп, недавно развернутый webjob больше не был в производственном слоте!
Мои вопросы:
-
Можно ли запретить обмену веб-сайтов между производством и постановкой (webjobs действительно являются совершенно разными частями кода, чем веб-сайт).
-
Что именно обменивается для webjobs? Бинарные? График? Оба?
-
Как я могу запретить запуск всех веб-сайтов в промежуточном слоте? Мои веб-сайты не должны быть высокодоступными, и я могу легко тестировать их в автономном режиме.
-
Если я VS развожу webjobs в промежуточном слоте и сделаю своп, тогда в текущем промежуточном слоте будет отсутствовать развернутый webjob, и я потеряю его, когда я сделаю обновление своего следующего веб-сайта, поэтому, где я должен быть развертывание моих веб-сайтов?
Существует связанный поток , но он предполагает, что веб-сайт развертывается одновременно с веб-сайтом, который не является тем, что у меня есть в настоящее время.
Мне очень нравятся веб-сайты и веб-сайты, но похоже, что история, связанная с непрерывным независимым развертыванием веб-сайтов и веб-сайтов, нарушена.
Поистине оцените совет!
Спасибо
Ответы
Ответ 1
Слоты для развертывания сайтов Azure - это не простое понятие для понимания, а вместе с WebJobs это становится немного сложнее.
Я предлагаю прочитать следующее сообщение, чтобы лучше понять слоты развертывания - http://blog.amitapple.com/post/2014/11/azure-websites-slots/ (включая раздел комментариев для полезной информации)
Чтобы лучше понять, как WebJobs работают и развертываются, см. этот пост - http://blog.amitapple.com/post/74215124623/deploy-azure-webjobs/
Важно понимать, что:
- При замене слотов развертывания вы фактически меняете содержимое/файлы веб-сайта между двумя слотами.
- WebJobs являются частью содержимого веб-сайта.
Поэтому, когда вы меняете место, вы фактически меняете файлы веб-сайта, включая WebJob.
Обратите внимание, что неправильная практика развертывания WebJob напрямую, а не как часть файлов/репозитория вашего веб-сайта, вероятно, это причина проблем, которые у вас есть.
Чтобы программа WebJobs не запускалась в промежуточном слоте, вы можете добавить параметр приложения WEBJOBS_STOPPED
и установить его на 1
(на лазурном портале). (источник). Убедитесь, что этот параметр приложения прикреплен к слоту, иначе он будет распространяться в производственном слоте.
Ответ 2
Самым простым решением этой проблемы является наличие отдельного веб-приложения для вашего веб-задания. Просто разместите приложение Worker Web App на одном и том же Плане обслуживания Azure и у вас будет два отдельных веб-приложения, работающие на одном компьютере.
веб-приложение
Веб-приложение-рабочий
Ответ 3
Здесь Амит отвечает на # 3 с помощью PowerShell,
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 $_ }