msbuild отличается от командной строки и Jenkins

У меня есть работа Дженкинса, которая создает и развертывает пакет веб-сайта.

Когда я запускаю задание из Jenkins, он создает пакет для каждого проекта, а пакет развертывания не содержит веб-задания. Однако та же команда msbuild из командной строки создает файл пакета большего размера, включая веб-задания в нем.

Я пробовал запустить командную строку msbuild, используя ту же учетную запись пользователя Jenkins, и она тоже работает.

Если я сравниваю оба журнала вывода msbuild, я вижу несколько отличий, которые являются основным отличием, которое включает журнал msbuild командной строки:

Target "DiscoverWebJobs" in file "E:\Jenkins\jobs\Queue - Publish\workspace\tvdQueue\packages\Microsoft.Web.WebJobs.Publish.1.0.12\tools\webjobs.wap.targets" from project "E:\Jenkins\jobs\Queue - Publish\workspace\tvdQueue\WebAPI\WebAPI.csproj" (target "Build" depends on it):
    Task "Message"
      WebJobs: reading [E:\Jenkins\jobs\Publish job\workspace\Project\WebAPI\Properties\webjobs-list.json]
    Done executing task "Message".
    Using "ReadWebJobsConfigFile" task from assembly "E:\Jenkins\jobs\Publish job\workspace\Project\packages\Microsoft.Web.WebJobs.Publish.1.0.12\tools\Microsoft.Web.WebJobs.Publish.Tasks.dll".
    Task "ReadWebJobsConfigFile"
    Done executing task "ReadWebJobsConfigFile".
    Task "Message"
      WebJobs: WebJobs found: [../blah1.csproj;../blah2.csproj;../blah3.csproj;]
    Done executing task "Message".
    Done building target "DiscoverWebJobs" in project "WebAPI.csproj"

Я попытался добавить цель «DiscoverWebJobs» в командную строку Jenkins, но там написано, что ее нельзя найти ... Я потратил уйму времени, пробуя разные параметры, работая с разных учетных записей, используя PowerShell, ... но ничего, и я Уверен, есть что-то глупое.

Если файл zip-пакета не включает файлы веб-заданий, при развертывании он не обновляет веб-задания. Я мог бы развернуть каждый zip-файл отдельно, но есть несколько веб-заданий, и если кто-то включит новый, он не будет развернут, что сделает настройку непрерывной интеграции для этого проекта бесполезной.


person David Aleu    schedule 10.01.2017    source источник
comment
Если вы запустите с подробным описанием (передайте /v:d команде msbuild) от jenkins, возможно, в журнале будет объяснение того, почему эта цель была пропущена. Ищите строки, содержащие "WebJobs", например Целевое задание DiscoverWebJobs пропущено, потому что ...   -  person stijn    schedule 10.01.2017
comment
Я сравнил журналы msbuild из Jenkins и командной строки, но пропуска целей нет, только цели, которые запускаются только из командной строки, но не запускаются, когда msbuild выполняется из задания Jenkins.   -  person David Aleu    schedule 10.01.2017


Ответы (2)


Изучение webjobs.wap.targets и webjobs.targets из Microsoft WebJobs Publish 1.0.12 nuget, следующие параметры msbuild влияют на то, запускается ли цель DiscoverWebJobs. Вы можете установить / переопределить их значения с помощью переключателя /p: в msbuild.

  • SkipApp_DataFolder (должно быть False)
  • WebJobsExtendWebPublish (должно быть true)
  • WebJobsConfigFile (по этому пути должен существовать файл)

Вам не нужно устанавливать / отменять этот последний, если существует следующий файл: E:\Jenkins\jobs\Queue - Publish\workspace\tvdQueue\WebAPI\Properties\webjobs-list.json.

person weir    schedule 11.01.2017
comment
Каково содержимое файла webjobs-list.json по указанному выше пути? - person weir; 12.01.2017
comment
{$ schema: schemastore.org/schemas/json/webjobs-list.json, Веб-задания: [{filePath: ../blah1/blah1.csproj}, {filePath: ../blah2/blah2.csproj}, {filePath: ../blah3/blah3.csproj}]} - person David Aleu; 12.01.2017
comment
Но не волнуйтесь @weir, я наконец исправил это (см. Мой принятый ответ). Ваш первый комментарий заставил меня задуматься, поэтому я дал вам полезный ответ, спасибо! Я не знаю, почему эти цели были добавлены дважды ... возможно, проблема с пакетом nuget ... - person David Aleu; 12.01.2017
comment
Хорошая работа! Старый Import, вероятно, остался в результате какой-то ошибки времени выполнения, возникшей в uninstall.ps1 пакета 1.0.11. - person weir; 12.01.2017

Наконец то работает! Для меня исправление заключалось в удалении дублированного импорта целей «Microsoft.Web.WebJobs.Publish» во всех файлах csproj в решении.

‹Import Project =" .. \ packages \ Microsoft.Web.WebJobs.Publish.1.0.11 \ tools \ webjobs.targets "Condition =" Exists ('.. \ packages \ Microsoft.Web.WebJobs.Publish. 1.0.11 \ tools \ webjobs.targets ') "/›

<Import Project="..\packages\Microsoft.Web.WebJobs.Publish.1.0.12\tools\webjobs.targets" Condition="Exists('..\packages\Microsoft.Web.WebJobs.Publish.1.0.12\tools\webjobs.targets')" />

У меня были версии 1.0.11 и 1.0.12, поэтому я удалил старую, и она создала полный пакет, включая веб-задания.

Не уверен, почему запуск msbuild из Jenkins или из командной строки на одном компьютере будет иметь какой-либо другой эффект с этими дублированными целями, но ...

person David Aleu    schedule 12.01.2017
comment
Разница была в том, что в одном контексте папка ..\packages\Microsoft.Web.WebJobs.Publish.1.0.11\tools\webjobs.targets все еще существовала; в другом контексте устаревший импорт был проигнорирован из-за его атрибута Condition. Мои лучшие предположения относительно того, как это затем вызывает разницу в выводах, - это недокументированное изменение Microsoft.Web.WebJobs.Publish.Tasks.dll или побочный эффект выполнения сценариев дважды, возможно, относящийся к остаточным значениям свойств первого прогона, элементам или промежуточным выходным файлам. - person weir; 12.01.2017