Microsoft.Web.WebJobs.Publish在部署包

时间:2017-06-16 21:10:10

标签: azure msbuild azure-webjobs msdeploy azure-webjobssdk

我有大量Azure WebJobs,它们都部署到一个Azure App Service,以及同一个Azure App Service上的一个网站。每个WebJob都使用WebJobs SDK和Microsoft.Web.WebJobs.Publish nuget包(我们是最新版本1.0.13)来打包它们以进行部署。以下是我们在CI构建(VSTS)中用于生成部署包的MSBuild参数:

/p:DeployOnBuild=true /p:PublishProfile=Release /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=$(Build.StagingDirectory)

这会生成一个可以正常工作的程序包(因为WebJobs可以正确地作为WebJobs运行),并使用" Azure Web服务部署" VSTS任务,这不是问题。

问题是.zip文件包会复制所有WebJob程序集。这些重复项最终会转发到Azure App Service。

每个WebJob包的.zip文件中的文件夹结构是:

- Content/[build agent full path]/
     - app_data/jobs/continuous/[web job name]/[assembly files]
     - bin/[assembly files]

这会导致问题,原因有三个:

  1. 我们已开始调查与安全供应商合作,安全供应商将对我们的部署包执行静态分析。此重复会导致报告问题。
  2. 由于bin/[assembly files]向App Service提供,因此它们与同时部署到同一App Service的网站程序集混合在一起。
  3. 通过在这些部署包中传输所有这些额外的膨胀,我们的构建/发布时间变慢了。我的团队实践持续交付,并期望管道快速
  4. 那么除了必需的bin/[assembly files]之外,为什么Microsoft.Web.WebJobs.Publish包添加在app_data/jobs/continuous/[WebJobName]/[assembly files]?更重要的是,如何防止打包过程包含bin/[assembly files]

    我真的很讨厌必须添加构建步骤来拆分压缩包并将其重新组合在一起而不会产生额外的垃圾,或者必须找到一种手工制作发布包的方法。你有一份工作,Microsoft.Web.WebJobs.Publish! :)

2 个答案:

答案 0 :(得分:3)

我对https://stackoverflow.com/a/44611520/8654143的更新

我必须为现有目标添加多个覆盖才能使其正常工作:

user=> (count (three-sum-combinations [1 -2 1 1 -3 2]))
6

如何找到它?

1)使用<Target Name="CollectFilesFromContent" /> <Target Name="CollectFilesFromReference" /> <Target Name="CollectFilesFromIntermediateAssembly" /> <Target Name="CollectFilesFrom_SourceItemsToCopyToOutputDirectory" />

运行msbuild

2)检查日志并查找/verbosity:diag;将有相关条目DestinationRelativePath=bin

3)将FromTarget=SomeTargetName添加到<Target Name="SomeTargetName" />

您应该以标有.csproj的条目结束。

我认为有可能以某种方式过滤FromTarget=PublishWebJob变量的内容(可能会覆盖FilesForPackagingFromProject目标并修改CustomCollectFiles)但我不太了解msbuild。< / p>

答案 1 :(得分:0)

很抱歉听到您遇到此问题。作为临时解决方法,您可以在csproj中覆盖此目标(CollectFilesFromIntermediateAssembly)。这将阻止文件发布到bin文件夹。

此处示例: https://github.com/vijayrkn/ASPNetPublishSamples/blob/master/WebJobFullFramework/WebJobFullFramework.csproj#L56-L57

我们很快就会在WebJobs.Publish NuGet包中解决这个问题。