Здесь многое можно распаковать, но я попробую.
TL; DR Это то, как вы выпускаете релизы, которые причиняют вам всю боль. Измени это и все остальное попадет на место
Позволяет начать в конце и работать в обратном направлении.
Octopus Deploy имеет концепцию сред. Это означает, что вы можете развернуть один и тот же проект в нескольких средах и использовать механизм определения области действия Octopus для управления конфигурацией конкретной среды.
Итак, используя ваш пример.
Создает 3 пакета из артефакта сборки, ранее распакованного
Сборка XAML для трех областей развертывания - веб-ферма, фон
Кластер заданий и база данных
Я установил Среду в Осьминоге для каждой из ваших 50 Сред. (Я буду использовать 3 среды в этом примере, чтобы упростить его, но принципы применяются независимо от того, сколько у вас сред)
В моей среде разработки у меня есть один сервер, поэтому я создаю среду под названием "Dev" и добавляю щупальце для этого конкретного сервера. Затем я помечаю щупальце тип развертывания "Интернет", "Работа", "База данных"
Затем я настроил тестовую среду, в которой есть 3 сервера, поэтому я создаю среду и добавляю 3 сервера. Затем я помечаю каждое щупальце типом развертывания "Web", "Job", "Database"
Наконец-то я настроил среду производства. Это имеет 5 веб-серверов, 1 сервер заданий и 1 сервер базы данных. Я добавляю все 7 щупалец в окружающую среду и отмечаю их соответствующим образом.
Теперь мне нужен только 1 проект для развертывания во всех трех средах. В моем проекте у меня 3 шага.
Шаг 1 Развертывание веб-сайта
Шаг 2 Развертывание заданий
Шаг 3 Развертывание базы данных
Я могу пометить каждый из этих шагов, чтобы сказать, какое щупальце я хочу развернуть. Теперь, когда я запускаю развертывание, связь между тегами на шаге и тегами на щупальце означает, что Octopus знает, где развернуть код.
Переменные: Ваши переменные могут быть ограничены областью. Так, например, если строка подключения к базе данных среды разработки равна dev.database.net/Instance
, а строка подключения к базе данных тестовой среды - test.Database.net/Instance
, вы можете включить их в раздел переменных проекта. Если ваш DNS соответствует именам вашей среды, вы можете даже использовать некоторые встроенные переменные, чтобы упростить добавление сред. т.е. ${Octopus.Environment.Name}.Database.net/Instance
Релизы и номера версий: Так что вот в чем, я думаю, заключается ваша проблема. Добавление имени среды в выпуск и попытка создания нескольких выпусков с одной и той же версией в основном вызывает у тебя вся боль.
Используя приведенный выше пример, мы получаем 55.0.18709.3-atwfm, но
иногда мы хотим развернуть один и тот же артефакт сборки в том же
среда развертывания дважды. Но единственный проект Осьминога будет
уже есть релиз 55.0.18709.3-atwfm, так что как развернуть
55.0.18709.3 в atwfm снова, без удаления уже существующего выпуска?
Здесь есть пара вещей. В Octopus вы можете легко выполнить развертывание снова из пользовательского интерфейса, однако, похоже, вы восстанавливаете артефакт и пытаетесь создать новую версию с тем же номером версии. Не делай этого! Каждая новая сборка должна иметь уникальный и уникальный номер сборки / номер выпуска.
Принцип, который я придерживаюсь, - "построить один раз, развернуть много"
Когда вы создаете выпуск, для него требуется номер версии, затем этот выпуск проходит через среды. Поэтому я создаю свой код, и он получает номер версии 55.0.18709.3
, а затем развертываю его в Dev. Когда развертывание будет проверено, я затем хочу «Продвинуть» релиз для тестирования, я могу сделать это из Octopus или получить TFS, чтобы сделать это.
Так что я продвигаю 55.0.18709.3
, чтобы проверить, а затем перейти к продукту. Если мне нужно узнать, какой релиз и в какой среде, Octopus сообщит мне об этом через панель управления или API.
Наконец, я могу "организовать" поток релизов через мои среды, используя Build v.next.
Так что мой процесс от конца до конца выглядит примерно так.
Build vNext Build
- Компиляция
- Выполнить юнит-тесты
- Пакетная продукция
- Опубликовать пакет
build vNext Release
- Позвоните в Octopus, чтобы создать релиз, передав номер версии
- При желании разверните релиз в первой среде на своем пути к жизни
Теперь у меня есть все, что мне нужно в Octopus для развертывания в ЛЮБОЙ среде с одним проектом и конфигурацией, специфичной для моей среды.
Я могу либо «Развернуть» выпуск в определенной среде, либо «Продвинуть» выпуск из одной среды в другую. Это можно легко сделать из интерфейса Octopus
Или я могу создать «Promote» с помощью плагина Octopus в TFS и использовать его для организации продвижения кода через среды.
Осьминог Терминология.
Создать релиз - это объединяет артефакты и номер релиза в Octopus, чтобы создать неизменную вещь, которая будет развернута в одной или нескольких средах.
Развертывание релиза - действие по переносу вашего кода в определенную среду.
Содействие выпуску - после развертывания кода в одной среде его можно продвигать в другие среды
Если у вас есть определенная последовательность сред, то вы можете использовать функцию «Жизненные циклы» Octopus для обеспечения этого рабочего процесса. но это тема для другого дня!
EDIT1 Response
Не думаю, что редактирование меняет мой ответ, вы можете повторно развертывать один и тот же выпуск столько раз, сколько захотите. что вы не можете сделать, это создать новую версию с тем же номером версии. Возможно, вы захотите отделить эти шаги, не могли бы вы добавить более подробную информацию о том, какие изменения в сборке XAML? Вы можете изменить переменные в выпуске, вы можете обновить их в осьминоге, а затем повторно развернуть
РЕДАКТИРОВАТЬ 2 Ответ
Это проясняет ситуацию. Я думаю, что вам нужно принять удар и перенести параметры в Осьминог. Его управление переменными намного лучше, чем сборки XAML, и хотя сборка vNext сравнима с Octopus, имеет смысл иметь конфигурацию в Octopus. Поскольку сборки XAML находятся на выходе, имеет смысл перенести этот материал сейчас. Хотя это может быть много работы, в конце вы получите гораздо более удручающий рабочий процесс, и вы действительно сможете воспользоваться мощью Осьминога.
Результаты теста. Я согласен, что он лучше подходит для сборки vNext, поэтому на данный момент вы будете использовать build vNext в качестве Orchestrator и Octopus Deploy в качестве инструмента управления релизами.
Процесс будет выглядеть примерно так:
Build vNext
- Код компиляции.
- Выполнить юнит-тесты
- Запустите Octopack
- Публикация пакетов
- Позвоните в Octopus и создайте релиз
- Вызовите Осьминога для развертывания в "Dev"
- Выполнить тесты дыма
- Запуск интеграционных тестов
- Вызовите «Selenium» для запуска тестов пользовательского интерфейса.
- Позвоните в Octopus, чтобы повысить выпуск до "Test"
- Выполнить тесты дыма
- Запуск интеграционных тестов
- Вызовите "Selenium" для запуска тестов пользовательского интерфейса.
- Позвоните Осьминогу, чтобы Содействовать выпуску "Производство" (возможно, с ручной иннервацией)
- Выполнить тесты дыма
- Запуск интеграционных тестов
- Вызовите "Selenium" для запуска тестов пользовательского интерфейса.