Веб-задание промежуточного слота, не останавливающееся после развертывания конвейера в Azure Devops

0

Вопрос

В некоторых развертываниях, которые я выполняю для App Service ресурс, содержащий 2 слота (a production и staging слоты), веб-задание постановки не останавливается после замены слотов.

В основном у меня в конвейере есть следующие задачи:

## Start App Service (staging)
- task: AzureAppServiceManage@0
  displayName: 'Start Azure App Service: some-app-webjob (staging)'
  inputs:
    azureSubscription: 'xxx'
    Action: 'Start Azure App Service'
    WebAppName: 'some-app-webjob'
    SpecifySlotOrASE: true
    ResourceGroupName: 'some-rg-app-webjob'
    Slot: staging
##Start staging continuous webjob
- task: AzureAppServiceManage@0
  displayName: 'Start all continuous webjobs: some-app-webjob (staging)'
  inputs:
    azureSubscription: 'Subscrição do Visual Studio Enterprise(c9f20c2b-15cf-41fb-8122-ddf095c6db02)'
    Action: 'Start all continuous webjobs'
    WebAppName: 'some-app-webjob'
    SpecifySlotOrASE: true
    ResourceGroupName: 'some-rg-app-webjob'
    Slot: 'staging'

## Swap Slots (staging to production)
- task: AzureAppServiceManage@0
  displayName: 'Swap Slots: some-app-webjob'
  inputs:
    azureSubscription: 'xxx'
    WebAppName: 'some-app-webjob'
    ResourceGroupName: 'some-rg-app-webjob'
    SourceSlot: staging
    TargetSlot: production

# Stop WebJobs running Staging
- task: AzureAppServiceManage@0
  displayName: 'Stop all continuous webjobs: some-app-webjob (staging)'
  inputs:
    azureSubscription: 'xxx'
    Action: 'Stop all continuous webjobs'
    WebAppName: 'some-app-webjob'
    SpecifySlotOrASE: true
    ResourceGroupName: 'some-rg-app-webjob'
    Slot: staging
    
## Stop App Service (staging)
- task: AzureAppServiceManage@0
  displayName: 'Stop Azure App Service: some-app-webjob (staging)'
  inputs:
    azureSubscription: 'xxx'
    Action: 'Stop Azure App Service'
    WebAppName: 'some-app-webjob'
    SpecifySlotOrASE: true
    ResourceGroupName: 'some-rg-app-webjob'
    Slot: staging

Если я пойду искать свой слот, служба приложений будет остановлена. Но иногда рабочее задание продолжает выполняться, в то время как оно не должно выполняться. так как у меня есть задача, которая должна возглавлять все непрерывные веб-задания после обмена с производством.

Подводя итог, можно сказать, что это может произойти:

  • непрерывное выполнение веб-задания в промежуточном слоте
  • непрерывная веб-работа в процессе производства слотов

После поиска я нашел эту тему на github https://github.com/projectkudu/kudu/issues/1886 Это указывает на то, что веб-задания выполняются на сайте scm, на который не влияет команда остановить сайт. Тем не менее, у меня есть задача, которая предположительно останавливает все непрерывные веб-задания.

Есть ли какая-то причина для этого? Как мы можем предотвратить это? Я не хочу, чтобы веб-задание со старым кодом выполнялось после развертывания.

1

Лучший ответ

1

Чтобы развернуть непрерывное веб-задание в остановленном состоянии, просто добавьте файл с именем disable.job в корне вашего веб-задания (двоичные файлы) это сообщит платформе, что веб-задание в данный момент остановлено.

Вы можете добавить настройки приложения WEBJOBS_STOPPED в свой промежуточный слот и установите его в 1 (на портале azure). Сделайте эту настройку "Настройкой слота", чтобы она не менялась местами с производством.

Это то, что происходит, когда вы меняете исходный слот (Промежуточный) на целевой слот (Производственный).

  • Во-первых, на промежуточном сайте необходимо внести некоторые изменения в настройки приложения и строки подключения, помеченные как "слот". Существуют также другие изменения, связанные с управлением версиями, которые, возможно, потребуется применить. Это приводит к перезапуску промежуточного сайта, что нормально.

  • Затем промежуточный сайт разогревается, отправляя запрос на его корневой путь (т. е."/") и ожидая его завершения.

  • Теперь, когда Промежуточная площадка прогрелась, ее переводят в производство. Времени простоя нет, так как он идет прямо с одного теплого участка на другой.

  • Наконец, сайт, который раньше был производственным, а теперь находится на стадии разработки, также нуждается в применении некоторых настроек, что приведет к его перезапуску. Опять же, это нормально, так как это происходит на промежуточном сайте.

Я не хочу, чтобы веб-задание со старым кодом выполнялось после развертывания.

  • Проверьте, есть ли у вас среда stage (добавьте этап к имени веб-приложения), и если да, зайдите на портал управления Azure и остановите их.

  • Недостаточно остановить веб-приложение, вы должны остановить веб-задания напрямую. Это делается (на новом портале) в разделе Настройки->Веб-задания, а затем щелкните правой кнопкой мыши по имени веб-заданий, выбрав пункт Остановить.

Пожалуйста, обратитесь к веб-приложениям Azure (веб-сайтам) Слоты развертывания для получения более подробной информации.

2021-11-24 08:07:57

Привет @HarshithaVeeramalla-гора, я думаю, флаг WEBJOBS_STOPPED это отличное решение, применяемое для промежуточного слота. Изящно ли это останавливает веб-задание, которое было заменено?
Nmaster88

Пожалуйста, обратитесь к разделу Управление веб-заданиями
HarshithaVeeramalla-MT

WEBJOB_STOPPED со значением 1, чтобы остановить все веб-задания, выполняемые на вашем сайте. Это может быть удобно для предотвращения выполнения конфликтующих веб-заданий как в промежуточных, так и в производственных слотах.
HarshithaVeeramalla-MT

спасибо, я уже прочитал это, но, похоже, в нем не указано, как он останавливает непрерывные веб-задания. Это просто говорит о том, что это останавливается, я полагаю, что это убивает процесс.
Nmaster88

Для непрерывности вы можете сделать это, просто поместив файл с именем "disable.job" в корневой каталог WebJob.
HarshithaVeeramalla-MT

Пожалуйста, обратитесь к пункту 6 непрерывной веб-работы
HarshithaVeeramalla-MT

Я применяю флаг WEBJOBS_STOPPED к обоим промежуточным слотам. Это останавливает как непрерывный, так и запускаемый webjpbs, который работает как заклинание.
Nmaster88

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................