У меня есть большое количество веб-заданий Azure, которые развертываются в одной службе приложений Azure вместе с веб-сайтом в той же службе приложений Azure. Все веб-задания используют пакет SDK для веб-заданий и пакет nuget Microsoft.Web.WebJobs.Publish (у нас последняя версия 1.0.13), чтобы упаковать их для развертывания. Ниже приведены аргументы MSBuild, которые мы используем в сборке CI (VSTS) для создания пакета развертывания.
/p:DeployOnBuild=true /p:PublishProfile=Release /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=$(Build.StagingDirectory)
Это создает пакет, который отлично работает (в том смысле, что веб-задания выполняются правильно как веб-задания) с задачей VSTS «Развертывание веб-службы Azure», это не проблема.
Проблема в том, что пакет файлов .zip дублирует все сборки WebJob. Эти дубликаты в конечном итоге попадают в службу приложений Azure.
Структура папок в ZIP-файле каждого пакета веб-задания следующая:
- Content/[build agent full path]/
- app_data/jobs/continuous/[web job name]/[assembly files]
- bin/[assembly files]
Это вызывает проблемы по 3 причинам:
- Мы начали изучать возможности партнерства с поставщиком средств безопасности, который будет выполнять статический анализ наших пакетов развертывания. Это дублирование вызывает проблемы с отчетами.
- Поскольку
bin/[assembly files]
поступает в службу приложений, они смешиваются со сборками для веб-сайта, которые также развернуты в той же службе приложений. - Наше время сборки/выпуска замедляется за счет переноса всего этого лишнего наворотов в эти пакеты развертывания. Моя команда практикует непрерывную доставку и ожидает, что конвейер будет быстрым.
Так почему же пакет Microsoft.Web.WebJobs.Publish добавляется в bin/[assembly files]
в дополнение к обязательному app_data/jobs/continuous/[WebJobName]/[assembly files]
? И что еще более важно, как я могу предотвратить включение bin/[assembly files]
в процесс упаковки?
Мне бы очень не хотелось добавлять этапы сборки, чтобы разделить заархивированные пакеты и собрать их вместе без лишнего мусора, или найти способ вручную создать пакет для публикации. У вас есть 1 задание, Microsoft.Web.WebJobs.Publish! :)