У моей команды есть веб-приложение служб приложений Azure, в котором мы размещаем три основных компонента:
- Наш основной сервер Node.js и API, который находится в корне
- Вторичный API, который находится в виртуальном каталоге
- Наше интерфейсное веб-приложение (также обслуживаемое сервером Node.js), которое находится в другом виртуальном каталоге.
Каждый из этих трех компонентов поддерживается в собственном репозитории git в VSTS. Кроме того, в веб-приложении есть три слота: dev
, ppe
и prod
.
Мы пытаемся перенести наши процессы сборки из Azure в VSTS. Мы бы хотели сделать следующее:
- Когда есть новая фиксация
master
в любом из трех репозиториев, создайте сборку разработчика и разверните ее непосредственно в соответствующем виртуальном каталоге в слотеdev
. - Когда компонент готов к выпуску - будь то новая фиксация в специальной
RELEASE
ветке или запуск процесса выпуска вручную - создайте производственную сборку, разверните ее вppe
и, с одобрения пользователя, поменяйте местами слотыppe
иprod
.
Сложность здесь заключается в том, что при развертывании любого компонента в ppe
нам также необходимо развернуть последние выпущенные версии всех трех компонентов в ppe
, поскольку в Azure нет возможности менять местами виртуальные каталоги независимо.
В настоящее время у меня есть следующее:
- Процесс сборки для каждого из трех репозиториев, который запускается при фиксации
master
илиRELEASE
. Он создает как сборку для разработки, так и производственную сборку и публикует их. - Процесс выпуска разработчика, который запускается для любых новых сборок
master
в любом из трех репозиториев. Он берет последнюю сборку разработчика изmaster
из всех трех репозиториев и развертывает их в соответствующие виртуальные каталоги вdev
. - Процесс производственного выпуска, который запускается при любой новой сборке
RELEASE
в любом из трех репозиториев. Он берет последнюю производственную сборку изRELEASE
из всех трех репозиториев, развертывает их в соответствующие виртуальные каталоги вppe
и, с одобрения пользователя, меняет местамиppe
иprod
.
Это работает, но кажется довольно неуклюжим, требует много потраченной впустую работы, и не похоже, что мы точно используем преимущества конвейера сборки / выпуска VSTS. Есть ли лучший или более приемлемый способ сделать это?