14
votes

We have an Azure Website setup with a "staging" deployment slot, and we use a continuous Azure WebJob to process long-running background jobs. It appears that when you publish to the Website (and include the WebJob binaries), that the WebJob will restart itself if it was previously stopped.

Our current deployment process looks like the following:

  1. Deploy to STAGING
  2. Immediately & Quickly stop the WebJob on STAGING (try to prevent 2 WebJobs from processing messages)
  3. Smoke test and verify code on STAGING works
  4. Stop the PRODUCTION WebJob (let it drain off queue messages)
  5. Swap between PRODUCTION and STAGING
  6. Start the PRODUCTION WebJob (which was just the STAGING WebJob)

Is there a trick (say a flag file or something) to tell a WebJob NOT to start up after publishing?

3

3 Answers

21
votes

To deploy a continuous WebJob in a stopped state simply add a file called disable.job at the root of your WebJob (binaries), this will tell the framework that the WebJob is currently stopped.

To view this behavior you can simply stop a continuous WebJob and see that this file is generated and placed at the WebJob's directory.

21
votes

You can add Application Setting WEBJOBS_STOPPED to your staging slot and set it to 1. Make this setting 'Slot Setting' so that it is not swapped with production.

0
votes

AFAIK, there is no out of the box solution for that. However, you can set an app setting and have the webjob code check for it when it starts. Also, you can use the HTTP_HOST variable to figure out the environment.