我有大量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]
这会导致问题,原因有三个:
bin/[assembly files]
向App Service提供,因此它们与同时部署到同一App Service的网站程序集混合在一起。那么除了必需的bin/[assembly files]
之外,为什么Microsoft.Web.WebJobs.Publish包添加在app_data/jobs/continuous/[WebJobName]/[assembly files]
?更重要的是,如何防止打包过程包含bin/[assembly files]
?
我真的很讨厌必须添加构建步骤来拆分压缩包并将其重新组合在一起而不会产生额外的垃圾,或者必须找到一种手工制作发布包的方法。你有一份工作,Microsoft.Web.WebJobs.Publish! :)
答案 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" />
2)检查日志并查找/verbosity:diag
;将有相关条目DestinationRelativePath=bin
3)将FromTarget=SomeTargetName
添加到<Target Name="SomeTargetName" />
您应该以标有.csproj
的条目结束。
我认为有可能以某种方式过滤FromTarget=PublishWebJob
变量的内容(可能会覆盖FilesForPackagingFromProject
目标并修改CustomCollectFiles
)但我不太了解msbuild。< / p>
答案 1 :(得分:0)
很抱歉听到您遇到此问题。作为临时解决方法,您可以在csproj中覆盖此目标(CollectFilesFromIntermediateAssembly)。这将阻止文件发布到bin文件夹。
我们很快就会在WebJobs.Publish NuGet包中解决这个问题。