Настройка публикации в папку с использованием VSTS
Я использовал publish to folder
вариант через Visual Studio, щелкнув правой кнопкой мыши на проекте -> опубликовать -> опубликовать в папку. Результатом всегда был готовый к копированию проект с применением преобразований. Я хотел автоматизировать этот процесс с помощью VSTS, и у меня была сборка установки на VSTS.
Я использовал следующие шаги:
- NuGet restore
- Build solution
- Publish Build Artifacts
в $(build.artifactstagingdirectory)
- Windows machine file copy
от $(build.artifactstagingdirectory)
на удаленную машину с помощью admin login
а также password
И, наконец, я получаю zip-пакет на удаленной машине со сложной структурой папок без применения каких-либо преобразований внутри.
Что случилось? Как я могу настроить такую же "публикацию в папку", как в Visual Studio, но используя VSTS?
2 ответа
Вы публикуете веб-приложение с помощью метода файловой системы, оно основано на указанной конфигурации (например, Debug, Release) для преобразования web.config. Поэтому вам необходимо проверить, какую конфигурацию вы указали в задаче решения для сборки (например, в задаче сборки Visual Studio)
Простые задачи:
- Задача программы установки NuGet
- Задача восстановления NuGet
- Задача сборки Visual Studio (аргументы MSBuild:
/p:SkipInvalidConfigurations=true /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactstagingdirectory)\\" /p:DeployDefaultTarget=WebPublish
; Платформа:$(BuildPlatform)
; Конфигурация:$(BuildConfiguration)
) Примечание: BuildPlatform и BuildConfiguration являются переменными сборки. Он опубликует веб-приложение в каталоге артефактов ([рабочая папка агента]/1/a) - Опубликовать артефакты сборки (путь к публикации: $ (build.artifactstagingdirectory))
Добавьте ниже Target к вашему.csproj, чтобы включить преобразование конфигурационных файлов
<Target Name="TransformConfigFiles" AfterTargets="AfterBuild" Condition="'$(TransformConfigFiles)'=='true'">
<ItemGroup>
<DeleteAfterBuild Include="$(WebProjectOutputDir)\Web.*.config" />
</ItemGroup>
<TransformXml Source="Web.config" Transform="$(ProjectConfigTransformFileName)" Destination="$(WebProjectOutputDir)\Web.config" />
<Delete Files="@(DeleteAfterBuild)" /></Target>
На шаге решения для сборки добавьте следующие аргументы сборки "/p:TransformConfigFiles=true", чтобы выполнить преобразование конфигурации с использованием указанной выше цели в.csproj
/p:TransformConfigFiles=true /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:OutDir="$(build.stagingDirectory)"
Затем вы можете использовать шаг публикации для публикации содержимого в $(build.stagingDirectory). Вы можете использовать $(build.stagingDirectory)_PublishedWebsites в качестве пути для публикации, если вам нужен только вывод сайта.
Это позволит вам получить пакет ms deploy, а также xcopy deploy опубликованные файлы веб-сайта.
Вы можете использовать задачу копирования файлов перед задачей публикации, чтобы скопировать любые дополнительные файлы, если они у вас есть, в $(build.stagingDirectory) и опубликовать их как артефакты сборки.
Используйте управление выпуском VSTS с группами развертывания для развертывания приложения на целевом сервере. Вы можете использовать задачу развертывания IIS для развертывания в IIS с помощью пакета ms deploy. Если вы используете пакет веб-развертывания, вы можете использовать файл parameters.xml в своем веб-приложении, чтобы получить параметры веб-конфигурации, назначенные для.setparameters.xml, чтобы можно было изменять значения во время развертывания с помощью задачи развертывания IIS.