2017-06-16 36 views
1

我有大量的Azure WebJobs都部署到单个Azure应用程序服务以及同一Azure应用程序服务上的网站。每个WebJob都使用WebJobs SDK和Microsoft.Web.WebJobs.Publish nuget包(我们是最新版本1.0.13)将其打包以供部署。以下是的MSBuild参数我们在CI版本(VSTS)的使用来产生部署包:用Microsoft.Web.WebJobs.Publish在部署包中生成重复程序集

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

这将产生正常工作包(在该WebJobs正常运行作为WebJobs)的“ Azure Web Service部署“VSTS任务,这不是问题。

问题是.zip文件包复制了所有WebJob程序集。这些重复项最终会发布到Azure应用服务。

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

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

这导致3个原因,一个问题:

  1. 我们已经开始调查了安全厂商谁将会进行合作静态分析我们的部署包。这种重复会导致报告问题。
  2. 由于bin/[assembly files]将其应用到App Service,因此它们与也部署到同一App Service的网站程序集相互混合。
  3. 通过在这些部署包中传输所有这些额外的膨胀,我们的构建/发布时间会变慢。我的团队实践持续交付,并预计快速

那么为什么除了所需的app_data/jobs/continuous/[WebJobName]/[assembly files]之外,Microsoft.Web.WebJobs.Publish包中还添加了bin/[assembly files]?更重要的是,如何防止包装过程中包含bin/[assembly files]

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

回答

0

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

样品在这里: https://github.com/vijayrkn/ASPNetPublishSamples/blob/master/WebJobFullFramework/WebJobFullFramework.csproj#L56-L57

我们将尽快修复在WebJobs.Publish NuGet包这个问题。

+0

我现在正在尝试使用此解决方法,但如果永久性修补程序即将发布(宁愿在某人告诉我哪个软件包的正式版本将修复此问题时标记答案),它就很难将其标记为答案。有什么地方可以从WebJobs.Publish团队跟踪这些情况吗?我找不到包的GitHub仓库... – bojingo

+0

更新:向WebJobs的.csproj文件添加''似乎对输出部署包没有任何影响。 – bojingo

+0

请确保您在此行覆盖此目标(https://github.com/vijayrkn/ASPNetPublishSamples/blob/master/WebJobFullFramework/WebJobFullFramework.csproj#L54)。导入webjob目标后,目标需要被覆盖。我们正在内部跟踪这个问题,因为我们没有这个GitHub项目。一旦修复程序可用,将确认软件包的版本号。 – vijayrkn

2

我对https://stackoverflow.com/a/44611520/8654143

我不得不添加多个覆盖现有的目标,使其工作更新:

<Target Name="CollectFilesFromContent" /> 
<Target Name="CollectFilesFromReference" /> 
<Target Name="CollectFilesFromIntermediateAssembly" /> 
<Target Name="CollectFilesFrom_SourceItemsToCopyToOutputDirectory" /> 

如何找呢?

1)运行的msbuild与/verbosity:diag

2)检查日志,并寻找DestinationRelativePath=bin;会有相关条目FromTarget=SomeTargetName

3)添加<Target Name="SomeTargetName" />.csproj

你应该输入结束标记FromTarget=PublishWebJob

我认为有可能以某种方式过滤FilesForPackagingFromProject变量的内容(可能覆盖CustomCollectFiles目标并修改FilesForPackagingFromProject那里),但我不知道msbuild足够好。

+0

这对我有效!我从Microsoft.Web.WebJobs.Publish.1.0.11升级到Microsoft.Web.WebJobs.Publish .1.1.0并且没有修复。所以,我必须添加''和'''。谢谢! – DaleyKD