Вопрос:

Сборка VSTS не публикует выходные файлы в правильном каталоге

azure-devops azure-pipelines

1416 просмотра

1 ответ

4649 Репутация автора

Я занимаюсь разработкой основного приложения ASP.NET.

Я использую VSTS онлайн для контроля версий. У меня также есть выделенная машина для сборки приложения.

Чтобы автоматизировать процесс, я сейчас пытаюсь определить сценарий сборки из VSTS онлайн.

Шаблон VSTS по умолчанию определяет много задач. Я удалил все ненужные задачи для своей цели, и теперь у меня осталось только три задачи: «Использовать NuGet», «Восстановление NuGet» и «Построить решение».

Аргумент msbuild по умолчанию для задачи «Build Solution»:

/p:DeployOnBuild=true /p:WebPublishMethod=Package 
/p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true 
/p:DesktopBuildPackageLocation=
   "$(build.artifactstagingdirectory)\WebApp.zip" 
/p:DeployIisAppPath="Default Web Site"

Хотя при запуске этого сценария нет ошибок, мне нужно изменить его так, чтобы выходные данные отправлялись в папку и не были упакованы.

Вот часть моей структуры каталогов, которая имеет отношение к моему вопросу:

C:\Dev\RCWebsite\RCWebsite.sln
C:\Dev\RCWebsite\RCWeb\RCWeb.csproj
C:\Dev\RCWebsite\RCWeb\Properties\PublishProfiles\FolderProfile.pubxml

Вот содержание профиля публикации:

<PropertyGroup>
  <WebPublishMethod>FileSystem</WebPublishMethod>
  <PublishProvider>FileSystem</PublishProvider>
  <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
  <LastUsedPlatform>Any CPU</LastUsedPlatform>
  <SiteUrlToLaunchAfterPublish />
  <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
  <ExcludeApp_Data>False</ExcludeApp_Data>
  <ProjectGuid>d7d9f3b7-fd0e-49c1-b6d2-3af5dddb6699</ProjectGuid>
  <publishUrl>C:\StagingSites\rcweb</publishUrl>
  <DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>

Из окна консоли я могу запустить следующую команду:

msbuild .\RCWeb\RCWeb.csproj /p:DeployOnBuild=true 
 /p:PublishProfile=RCWeb\Properties\PublishProfiles\FolderProfile.pubxml

Это работает как ожидалось. Окончательный вывод генерируется в C:\StagingSites\rcweb\каталоге.

Поскольку эта команда работает, я заменил аргумент msbuild в задаче VSTS «Build Solution» следующим образом:

/p:DeployOnBuild=true 
 /p:PublishProfile=rcWeb\Properties\PublishProfiles\FolderProfile.pubxml

Обратите внимание, что я не указал .\RCWeb\RCWeb.csprojв качестве аргумента. Угадай, механизм сборки автоматически позаботится об этом.

Когда я запускаю эту сборку и смотрю на файл журнала, я вижу, что решение построено нормально. Тем не менее, он никогда не копируется в C:\StagingSites\rcweb\каталог.

Может кто-нибудь сказать мне, что мне не хватает? Нужна ли мне еще одна задача «развертывания» после задачи «сборки решения»? С уважением.

Автор: Peter Источник Размещён: 09.11.2017 12:04

Ответы (1)


1 плюс

1140 Репутация автора

Хотя при запуске этого сценария нет ошибок, мне нужно изменить его так, чтобы выходные данные отправлялись в папку и не были упакованы.

Нет, вам не нужно другое задание на развертывание. Поскольку вам не нужно упаковывать и развертывать проект ASP .NET с помощью msbuild, вы можете избавиться от /p:DeployOnBuild=trueфлага msbuild. Кроме того, после просмотра вашего профиля публикации я понял, что вы на самом деле не передаете какую-либо информацию в msbuild (ничего, что не может быть передано по крайней мере из параметров msbuild), и поскольку вы больше не планируете осуществлять прямое развертывание из msbuild, это Хорошей идеей будет оставить профиль публикации в стороне.

После обрезки параметров и добавления нескольких необходимых ( /T:Packageговорит msbuild, что вы хотите упаковать двоичные файлы, но не развертывать их), вот как будет выглядеть ваша команда msbuild:

/p:OutDir=$(Build.BinariesDirectory) /T:Package /p:PackageLocation=$(Build.BinariesDirectory)\WebApp.zip   /p:PackageAsSingleFile=true

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

/p:OutDir=$(Build.BinariesDirectory) /T:Package /p:PackageLocation=$(Build.BinariesDirectory)\WebApp.zip  /p:PackageAsSingleFile=true p:_PackageTempDir=$(Build.BinariesDirectory)\MyAspNetWebsite

Это сгенерирует zip, а также папку binaries, готовую к развертыванию (к сожалению, вам нужен zip для работы временного флага dir)

ПРИМЕЧАНИЕ. Если вы планируете использовать команду msbuild в скрипте powershell, к переменным VSO потребуется доступ другим способом, например: 'BUILD_BINARIESDIRECTORY'

Автор: ThePretendProgrammer Размещён: 09.11.2017 04:56
Вопросы из категории :
32x32