Azure webjobs 部署和工作目录

Azure webjobs deployment and working directory

我对将 webjobs 部署到 azure 感到困惑。

我正在使用 .net 核心,所以我在我的 deploy.cmd 文件中手动发布了我的网络作业,例如:

call :ExecuteCmd dotnet publish "%DEPLOYMENT_SOURCE%\My.WebJobs\Mt.WebJobs.csproj" --output "%DEPLOYMENT_TEMP%\App_Data\Jobs\Continuous\MyWebJobs" --configuration Release

然后将 webjob 部署到 deployment_temp 文件夹。在那之后,KuduSync 启动并同步到 DEPLOYMENT_TARGET,这是 d:\home\site\wwwroot 如果我看的话,我可以看到那里有一个 App_Data\Jobs\Continuous\MyWebJobs 文件夹,并且我的所有文件都已正确部署并同步到该文件夹​​。

但是,当我 运行 Web 作业时,它报告它 运行 来自完全不同的位置 (D:\local\Temp\jobs\continuous\MyCustomerIO\bp003r3f.h2g)。当我查看该文件夹时,我看到了我部署的大部分 webjob 文件,但是 App_Data... 中的一些 JSON 配置文件从这里丢失了。

所以 - 为什么我的网络作业 运行ning 从这里开始?为什么我的一些已部署文件丢失了?

why is my webjob running from here?

WebJob 被复制到 %TEMP%\jobs\{job type}\{job name}\{random name} 下的一个临时目录,并将从那里 运行。此选项防止原始 WebJob 二进制文件被锁定,这可能会导致重新部署 WebJob 时出现问题。

WebJob 运行 直接来自 WebJob 二进制文件目录。我们将此选项称为就地。此选项可能存在锁定问题,仅应在没有锁定文件的风险时使用。

默认使用第一个选项(in place = false)。您可以在 [=39] 中明确配置此设置=].例如

{ "is_in_place": true/false }

And why are some of my deployed files missing?

我也测试重现了这种情况。但是我没有找到解决这个问题的方法。我建议你可以使用 Environment.GetEnvironmentVariable("WEBJOBS_ROOT_PATH"); 来获取根路径 webjob 的直接性。

WEBJOBS_ROOT_PATH webjob文件所在位置,可以指定绝对路径,否则该值将与默认根路径合并:

D:/home/site/wwwroot/ + WEBJOBS_ROOT_PATH(relative)得到webjob_name、webjob_run_id等等。

有关详细信息,您可以阅读此 article