【问题标题】:How to prevent Azure WebJob from starting up after publishing?如何防止 Azure WebJob 在发布后启动?
【发布时间】:2016-01-05 02:19:27
【问题描述】:

我们有一个带有“暂存”部署槽的 Azure 网站设置,并且我们使用连续的 Azure WebJob 来处理长时间运行的后台作业。看来,当您发布到网站(并包含 WebJob 二进制文件)时,如果 WebJob 之前已停止,它将重新启动。

我们当前的部署过程如下所示:

  1. 部署到 STAGING
  2. 立即快速停止 WebJob STAGING(尽量阻止 2 个 WebJobs 处理消息)
  3. Smoke 测试和验证 STAGING 作品的代码
  4. 停止 PRODUCTION WebJob(让它耗尽队列消息)
  5. 在 PRODUCTION 和 STAGING 之间切换
  6. 启动 PRODUCTION WebJob(这只是 STAGING WebJob)

是否有技巧(比如标志文件或其他东西)告诉 WebJob 在发布后不要启动?

【问题讨论】:

    标签: azure-webjobs


    【解决方案1】:

    要在停止状态下部署连续的 WebJob,只需在 WebJob(二进制文件)的根目录中添加一个名为 disable.job 的文件,这将告诉框架 WebJob 当前已停止。

    要查看此行为,您只需停止连续的 WebJob 并查看该文件是否已生成并放置在 WebJob 的目录中。

    【讨论】:

    • 刚刚测试过,效果很好。我在我的 c# 控制台项目的根目录中添加了一个“disable.job”文件,并将其构建操作设置为“内容”。
    • @Amit 我可以发誓直到最近,当一个网站发布时,网络作业的状态将保持不变——如果它停止了,就让它停止;如果它正在运行,请保持运行。我发布新版本的 web 应用程序代码和/或 webjob 代码的事实不应被视为框架的假设,即 webjobs 的运行状态应该改变。仅供参考,我在这里发帖stackoverflow.com/questions/42380853/…
    【解决方案2】:

    您可以将应用程序设置WEBJOBS_STOPPED 添加到暂存槽并将其设置为1。将此设置设为“Slot Setting”,以免与生产交换。

    【讨论】:

    【解决方案3】:

    AFAIK,没有开箱即用的解决方案。但是,您可以设置应用程序设置并在启动时让 webjob 代码检查它。此外,您可以使用HTTP_HOST 变量来确定环境。

    【讨论】:

    • 这是一个好主意,但如果您将连续作业设置为运行但实际上停止它而不是调用 RunAndBlock(),Azure 应该在看到它关闭时重新启动它。这个假设不正确吗?
    猜你喜欢
    • 2016-05-11
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    相关资源
    最近更新 更多