У меня есть решение VS с несколькими проектами, каждый из которых представляет собой независимое веб-задание, которое я размещаю в Single AppServices. Я пытаюсь автоматизировать это до непрерывного развертывания. Какая стратегия будет наилучшей для развертывания только работы в решении, которое было изменено? Есть ли способ узнать, какой проект был изменен в рамках слияния с CI? Мы используем git, и это решение находится в едином репозитории. Мы используем azure-webjobsdk для своих проектов.
Развертывание нескольких заданий в Visual Studio Team Services
Ответы (2)
Вы можете выполнить следующие шаги, чтобы развернуть единственное измененное веб-задание:
Предположим, что ваша файловая структура выглядит так:
Git root
|___WebJob1
|___WebJob1.sln
|___webJob1
|___WebJob1.csproj
|___WebJob2
|___WebJob2.csproj
|___ …
|___WebJobn
|___WebJobn.csproj
1. Добавьте переменную (например, buildporj
со значением по умолчанию none
) для записи измененного пакета проекта веб-задания.
2. Добавьте задачу восстановления NuGet для WebJob1/WebJob1.sln
.
3. Добавьте задачу сборки Visual Studio с аргументами MSBuild:
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:SkipInvalidConfigurations=true /p:PackageLocation="$(Build.BinariesDirectory)\\"
4. Добавьте PowerShell Task, чтобы определить, какой проект WebJob был изменен, и скопируйте пакет с $(Build.BinariesDirectory)
на $(Build.ArtifactStagingDirectory)
с помощью сценария, как показано ниже:
$files=$(git diff HEAD HEAD~ --name-only)
echo "changed files: $files"
for ($i=0;$i -lt $files.Length; $i++)
{
$file=$files[$i] -split '/'
$files[$i]=$file[1]
}
$uni=$files | Get-Unique
$uni=@($uni | Where-Object {$_ -notmatch ".sln"})
echo "You changed the project (if more than one projects were changed, only deploy the first one): $uni"
$proj=$uni[0]+".zip"
Write-Host "##vso[task.setvariable variable=buildproj;]$proj"
Copy-Item $(Build.BinariesDirectory)\$proj $(Build.ArtifactStagingDirectory)
- Добавить задачу развертывания службы приложений Azure, указав для параметра "Пакет или папка" значение
$(Build.ArtifactStagingDirectory)\**\$(buildproj)
.
Вы можете иметь разные проекты WebJobs (WebJob1.csproj, WebJob2.csproj) в одном решении, и вы можете развертывать их с помощью единого конвейера сборки и выпуска. Все, что вам нужно сделать, это: -
На этапе построения решения определите: -
Сборка Visual Studio (решение: ***. Sln, аргументы MSBuild: / p: DeployOnBuild = true / p: WebPublishMethod = Package / p: SkipInvalidConfigurations = true / p: PackageLocation = "$ (build.artifactstagingdirectory) \")
Публикация артефактов сборки (Путь к публикации: $ (build.artifactstagingdirectory); Имя артефакта: drop; Тип артефакта: Сервер)
Создайте определение выпуска для этого определения сборки и добавьте задачу
- Развертывание службы приложений Azure
- Выберите подписку Azure и название службы приложений;
- Выберите свой пакет или папку: $ (System.DefaultWorkingDirectory) ** \ WebJob1.zip
Вы можете аналогично создать еще одну задачу развертывания службы приложений Azure для WebJob2.zip и развернуть столько веб-заданий, сколько хотите, с помощью единого конвейера сборки и выпуска.