使用VSTS部署Azure WebJob

时间:2017-08-15 07:52:47

标签: visual-studio azure msbuild azure-devops azure-webjobs

我在使用Visual Studio Team Services(VSTS)部署Azure WebJob时遇到了一些问题。

WebJob似乎已成功部署,但它打破了同一App Service中托管的Azure网站!如果我使用VS2013进行部署,我没有这个问题。

这是我的构建任务,它生成WebJob部署包:

Build task - generate Azure WebJob deployment package

这是我的部署任务:

Deploy WebJob task

部署Azure WebJob时没有错误。如果我去Azure门户,我看到WebJob就在那里,它运行成功。 WebJob文件按预期复制到wwwroot\App_Data\jobs\triggered\RemoveExpiredDids文件夹中,但问题是其他一些文件将被复制到wwwroot\App_Data\bin文件夹中,这会破坏已部署到该App Service中的现有网站! !

所以我决定找出为什么会这样。下载并解压缩部署包后,我看到有2个文件夹(app_databin)和调度程序文件(settings.job):

WebJob deployment package

这解释了为什么有些程序集被应用到App Service的wwwroot\App_Data\bin中。奇怪的是,从VS2013部署时不会发生这种情况!我查看了MSBuild日志,找到了以下行:

  

由于跳过指令'SkipBinFolderOnDeploy',跳过了对象dirPath([app service name] \ bin)。

结束时,从VSTS部署Azure WebJob时包含bin文件夹,但从VS2013部署时不包括该文件夹。

所以我的问题是:如何防止在使用VSTS时部署bin文件夹?是否有任何MSBuild参数/标志可以执行此操作?

3 个答案:

答案 0 :(得分:3)

我也遇到过这个问题。

我发现的最新方法是在发布定义中创建azure deploy任务时使用Web Deploy Operation Settings,-skip:Directory =(在这种情况下,它将是-skip:Directory ='\\ bin') (附加论点)。我已经看到这确实排除了更新操作(result)中的bin文件夹。

如果这对您有任何帮助,请告诉我。

答案 1 :(得分:2)

请参阅以下方法将webjob部署到azure:

  1. 修改Visual Studio Build任务以使用 FileSystem 部署webjob(MSBuild参数:/p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactstagingdirectory)\\WebJob" /p:DeployDefaultTarget=WebPublish
  2. 添加删除文件任务以释放定义以删除bin文件夹(源文件夹:$(System.DefaultWorkingDirectory)/WebJobVnext/drop/WebJob);内容:bin
  3. 修改Azure App Service部署任务(1.取消选中使用Web Deploy发布选项.2。包或文件夹:$(System.DefaultWorkingDirectory)/[artifact name] /drop/WebJob

答案 2 :(得分:1)

我终于能够解决它,感谢@ starain-MSFT指出我正确的方向。不过,我不得不做一些小改动。这是创建部署包的任务:

Generate Azure WebJob deployment package

MSBuild参数:

  

/ p:DeployOnBuild = true / p:WebPublishMethod = FileSystem / p:DeployDefaultTarget = WebPublish / p:Configuration = $(BuildConfiguration)/ p:OutputPath =。\ bin \ / p:publishUrl =" $( build.artifactstagingdirectory)\ TEMP \ WebJob"

与@ starain-MSFT答案的区别在于我必须添加/p:OutputPath=参数,否则我会收到以下错误:

  

未为项目

设置OutputPath属性

生成包后,我删除bin文件夹并压缩它(这会减少构建时间)。

这是我的部署任务:

Deploy Azure WebJob using VSTS

请注意,$(DeploymentPackagePath)是包含部署包的zip文件的路径,如前所述。如果将软件包部署为zip文件,或者解压缩并部署文件夹,它无关紧要。