Как предотвратить использование веб-сайтов 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 $_ }