2014-07-01 35 views
13

Abbiamo una configurazione del sito Web di Azure con uno slot di distribuzione "di gestione temporanea" e utilizziamo un WebJob di Azure continuo per elaborare processi in background con esecuzione prolungata. Sembra che quando si pubblica sul sito Web (e includa i file binari di WebJob), il WebJob si riavvii da solo se è stato precedentemente arrestato.Come impedire a Azure WebJob di avviarsi dopo la pubblicazione?

Il nostro processo di distribuzione corrente è simile al seguente:

  1. Deploy per STAGING
  2. Immediatamente & fermare rapidamente il WebJob su STADIAZIONE (provate per impedire 2 WebJobs dai messaggi Processing)
  3. Smoke test e verifica codice su STAGING funziona
  4. Arresta il WebJOW PRODUCTION (lascia scaricare i messaggi in coda)
  5. Scambia tra PRODUZIONE e messa in scena
  6. Avviare il WebJob PRODUZIONE (che era solo il WebJob STAGING)

C'è un trucco (per esempio un file di bandiera o qualcosa del genere) per raccontare una WebJob NON per l'avvio dopo la pubblicazione?

risposta

18

Per distribuire un WebJob continuo in uno stato arrestato è sufficiente aggiungere un file denominato disable.job alla radice del proprio WebJob (file binari), questo indicherà al framework che WebJob è attualmente arrestato.

Per visualizzare questo comportamento, è sufficiente interrompere un WebJob continuo e verificare che questo file sia stato generato e inserito nella directory di WebJob.

+0

Appena testato questo e funziona benissimo. Ho aggiunto un file "disable.job" alla radice del mio progetto di console C# e ho impostato la sua azione di compilazione su "Contenuto". – ericb

+0

@Amit Potrei aver giurato che fino a poco tempo fa, quando è stato pubblicato un sito, lo stato del webjob sarebbe rimasto lo stesso - se è stato fermato, tenerlo fermo; se è in esecuzione, continua a farlo funzionare. Il fatto che sto pubblicando una nuova versione del codice dell'app web e/o del codice webjob non dovrebbe essere vista come un'ipotesi secondo cui lo stato di esecuzione dei webjobs dovrebbe essere cambiato. FYI che ho postato su questo qui https://stackoverflow.com/questions/42380853/stopped-azure-webjobs-are-starting-following-publishing-of-web-app. – Matt

0

AFAIK, non esiste una soluzione pronta per questo. Tuttavia, puoi impostare le impostazioni dell'app e fare in modo che il codice webjob lo controlli all'avvio. Inoltre, è possibile utilizzare la variabile HTTP_HOST per capire l'ambiente.

+0

Questa è una buona idea, ma se si imposta un lavoro continuo da eseguire ma in realtà lo si interrompe anziché chiamare RunAndBlock(), Azure dovrebbe riavviarlo non appena viene chiuso. Questa supposizione non è corretta? – jsgoupil

12

È possibile aggiungere l'Impostazione applicazione WEBJOBS_STOPPED allo slot di gestione temporanea e impostarlo su 1. Rendi questa impostazione 'Slot Setting' in modo che non venga scambiata con la produzione.

+0

Questo ha funzionato per me. Maggiori informazioni: https://github.com/projectkudu/kudu/search?utf8=%E2%9C%93&q=IsWebJobsStopped –

+1

Una volta impostato, è possibile verificare che il processo NON sia in esecuzione ("Interrotto") durante la gestione temporanea attraverso la tua bacheca webjobs: https://yoursubdomain.scm.azurewebsites.net/azurejobs/ – sammy34

+0

Questo funziona per me. Dovrebbe essere la risposta accettata IMO –

Problemi correlati