Webjob de preparo de fenda não parar depois de um pipeline de implantar no Azure Devops

0

Pergunta

Em alguns dos implanta eu estou fazendo para uma App Service recurso que contém 2 slots (um production e staging slots), o webjob de preparo é não parar após a trocar de slots.

Basicamente, eu tenho na minha pipeline as seguintes tarefas:

## 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

Se eu for olhar para o meu slot de teste o aplicativo de serviço é interrompido. Mas, às vezes, o workjob continua funcionando enquanto ele não deveria. desde que eu tenho uma tarefa que deveriam estar no topo de todas as contínuo webjobs após a troca com produção.

Em resumir isso pode acontecer:

  • contínua webjob no slot de preparo execução
  • contínua webjob no slot de produção de execução

Depois de pesquisar, encontrei esta thread github https://github.com/projectkudu/kudu/issues/1886 Ele indica que webjobs estão em execução no scm site que não é afetado pela parada site de comando. Ainda assim, eu tenho uma tarefa que supostamente deixa de todos contínua webjobs.

Há alguma razão para isto acontecer? Como podemos evitar isso? Eu não quero um webjob com o velho código em execução depois de um implante.

1

Melhor resposta

1

Para implantar um contínuo WebJob em um estado parado, simplesmente adicione um arquivo chamado disable.job na raiz do seu WebJob (binários), isso fará com que o quadro que o WebJob atualmente é interrompido.

Você pode adicionar Configuração do Aplicativo WEBJOBS_STOPPED para o preparo de fenda e defini-lo para 1 (o portal azure). Fazer esta configuração de "Slot Definição", para que ele não é trocado com a produção.

Isso é o que acontece quando você troca de uma fonte de fenda (Teste) para um destino de slot (de Produção).

  • Primeiro, a Encenação site precisa passar por algumas alterações de configuração para o Aplicativo de Configuração de e Seqüências de caracteres de Conexão que estão marcados como 'slot'. Há também outras alterações relacionadas ao controle de origem que podem precisar de ser aplicada. Isso faz com que o site de preparação para reiniciar, o que é bom.

  • Ao lado, a Encenação site fica aquecido, por ter uma solicitação enviada para o seu caminho de raiz (por exemplo,'/'), e aguardar a conclusão.

  • Agora que o site de Preparo é aquecido, ele fica trocada para Produção. Não há tempo para baixo, pois vai diretamente de um local quente para um outro.

  • Finalmente, o site que costumava ser de Produção e agora está de Preparo também precisa obter algumas configurações aplicam-se, fazendo com que ele reiniciar. Novamente, isso é bom, pois acontece no site de preparo.

Eu não quero um webjob com o velho código em execução depois de um implante.

  • Verifique se você tem um estágio de meio ambiente (add-estágio para o Webapp nome) e, em caso afirmativo, vá para o Azure portal de gerenciamento e impedi-los.

  • Não é o suficiente para parar o Webapp, você deve parar o WebJobs diretamente. Isso é feito (no novo portal) em Configurações->WebJobs e, em seguida, clicando com o botão direito sobre o webjobs nome selecionando parar.

Por favor, consulte Azure Web Apps (Sites) de Implantação de Slots para mais detalhes.

2021-11-24 08:07:57

Olá @HarshithaVeeramalla-MT eu acho que a bandeira WEBJOBS_STOPPED é uma ótima solução aplicada para preparo de fenda. Não é graciosamente parar o webjob que foi trocado?
Nmaster88

Por favor, consulte Gerenciar WebJobs
HarshithaVeeramalla-MT

WEBJOB_STOPPED com um valor de 1 para parar todos os WebJobs em execução no seu site. Isso pode ser útil como uma forma de evitar conflitos entre WebJobs de execução, tanto na preparação e produção de slots.
HarshithaVeeramalla-MT

obrigado, eu já tenha lido, mas não parece ser explícito sobre como ele interrompe o contínuo webjobs. Ele apenas diz que ele pára, eu suponho que ele mata o processo.
Nmaster88

Para contínua, você pode fazê-lo simplesmente por colocar um arquivo chamado "desativar.trabalho" na raiz do WebJob directory.
HarshithaVeeramalla-MT

Por favor, consulte contínua WebJob ponto 6
HarshithaVeeramalla-MT

Estou aplicando o WEBJOBS_STOPPED bandeira para tanto preparo de fenda. Ele pára contínuos e acionado webjpbs de execução como um encanto.
Nmaster88

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................