Автоматическое развертывание в Azure

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

Следующие шаги будут автоматизированы с минимальным ручным вмешательством:

  • Создать облачный сервис или виртуальную машину
  • Установите конкретную сборку продукта (в виде отдельной exe-службы или службы Windows, а не IIS)
  • Настроить конфигурационные файлы
  • Настройка учетной записи пользователя
  • Запустите exe/ сервис

Код в настоящее время находится в Visual Studio Online / TFS. У нас настроен круиз-контроль.NET CI, и мы планируем перейти на TeamCity. Это будет использоваться для обычных сред типа QA и Production, а также для специального развертывания, например, если в продукт была добавлена ​​пробная функция, и мы хотим развернуть ее на новой виртуальной машине для конкретного клиента, с которым можно поиграть. В идеале мы могли бы использовать командную строку или пользовательский интерфейс, чтобы выбрать сборку, создать виртуальную машину и указать любые изменения конфигурации.

Одним из возможных решений может быть Octopus Deploy, хотя я не думаю, что он сможет создать виртуальную машину Azure. Я, вероятно, также посмотрю на API Azure, а также на развертывание TFS.

В принципе, возможно ли это, и есть ли какие-то проверенные альтернативы, которые я упускаю, чтобы сузить круг моих исследований?

Заранее спасибо!

4 ответа

В то время как Octopus Deploy может делать много вещей, в данном конкретном сценарии вы просите его выполнить три типа работы - управление выпусками, автоматическое выделение ресурсов и управление конфигурацией. Это тонкая грань между удивительной автоматизацией и действительно сложной ситуацией.

Из задач, которые вы задаете, почти все они могут быть выполнены сегодня в Octopus. Я бы сказал, что возможно создать облачный сервис или виртуальную машину. Если есть какая-то командлета / библиотека PowerShell, которая позволяет раскручивать виртуальные машины с аутентификацией, скорее всего, вы можете сделать это Octopus, но это может быть не тот инструмент, который подходит для этой задачи сегодня. Зачем?

На мой взгляд, это искажает барьер между разработчиками, DevOps и SysAdmins. Независимо от того, используете ли вы Chef, Puppet, Salt и т. Д. Независимо от того, какое у вас есть управление конфигурацией, для этого нужен целый уровень пользователей, обладающих знаниями и опытом для его поддержки, - часто это называется опытом системы, которого могут не иметь сами разработчики, которым нужна такая гибкость. Во-вторых, сейчас это не сфокусировано на Осьминоге (пока). Мне было бы трудно сказать, использовать ли такой инструмент, как Octopus, в отношении того, что он может делать, в сравнении с тем, что он должен делать, или нет.

Очень приятно, что в Azure появилась поддержка предварительной установки щупальца Octopus для виртуальных машин. Но для этого требуется дополнительная информация, такая как отпечаток сервера, порт другая дополнительная информация о конфигурации, чтобы автоматизировать настройку vm. Это управление конфигурацией - должно ли оно быть под контролем Octopus, или что-то вроде Chef или Puppet? Честно говоря, у меня нет ответа на этот вопрос, но сейчас я чувствую себя не Осьминогом. Возможно, когда-нибудь, но до тех пор, пока это действительно не будет готово и полностью проверено и проверено, я бы немного подождал (хотя бы немного) с Octopus.

Если вы любитель приключений, то обязательно попробуйте Octopus. Я могу сделать PoC (подтверждение концепции) этой автоматизации инфраструктуры позже в этом году, но полагаться на нее сегодня для использования в бизнесе / производстве, как в качестве основного средства автоматизации инфраструктуры, будет рискованно и потребовать много работы и экспериментов. Опять же, я не говорю, что это не может быть сделано, я сомневаюсь, должно ли это быть сделано в Осьминоге с момента сегодняшнего ответа.

Во всяком случае, со стороны Octopus Deploy это возможно? Да, просто это еще не совсем решено. Глядя на то, что вы хотите сделать, я бы сказал, что это двухэтапный процесс: 1. раскрутить новую виртуальную машину, прикрепить щупальце к среде и 2. запустить процесс развертывания на этой новой виртуальной машине.

Я также рекомендовал бы проверить блог Осьминога. Они публично говорят об автоматизации инфраструктуры. Вы можете прочитать об этом здесь: http://octopusdeploy.com/blog/rfc-cloud-and-infrastructure-automation-support

Я надеюсь, что этот ответ поможет в некотором роде.

Решением для автоматического развертывания в Azure является использование ElasticBox.

Я пропущу детали всех параметров конфигурации для Azure, поддерживаемых ElasticBox, так как они подробно описаны в разделе документации: http://elasticbox.com/documentation/deploying-and-managing-instances/using-azure/.

Вам нужно всего лишь создать блок (модуль абстракции, который ElasticBox использует для определения установки и настройки развертывания службы или приложения в любом облаке), который отвечает за шаги, которые необходимо автоматизировать. Итак, наконец, вы развернете виртуальную машину практически без ручного вмешательства, всего одним щелчком мыши или командой с некоторыми параметрами.

В поле входят переменные, необходимые для вашего развертывания, и ваши сценарии (в данном случае, вероятно, PowerShell, но это могут быть bash, python, perl, java и т. Д.)

При развертывании поля, созданного для развертывания приложения, ElasticBox будет:

  • Создайте облачный сервис или виртуальную машину. (ElasticBox заботится о том, чтобы предоставить виртуальную машину вашему провайдеру Azure или любому из ваших предпочтительных облачных провайдеров).

  • Установите определенную сборку продукта (как отдельную исполняемую программу или службу Windows, а не IIS) -> Это должен быть сценарий события установки.

  • Настройте файлы конфигурации -> Это должно быть частью вашего скрипта события configure.

  • Настроить учетные записи пользователей -> Это должно быть частью вашего сценария настройки события.

  • Запустите exe / service -> Это должно быть частью вашего сценария запуска события.

ElasticBox имеет инструмент командной строки, который позволяет выполнять развертывание виртуальных машин ваших блоков, а также вы можете управлять своими развернутыми vms с помощью этого: https://pypi.python.org/pypi/ebcli

Он также поддерживает автоматическое завершение виртуальной машины после пользовательского значения времени.

Просто к вашему сведению; Один из вариантов - сделать все с помощью API управления Azure. Я также хотел бы сослаться на клиентские библиотеки Azure в проекте VS и сделать все, что написано на C#.

Это довольно широкий вопрос, но, безусловно, цель достижима одним из ряда методов. Хотя блог Тома Холландера об автоматизированных развертываниях немного устарел, он является хорошей отправной точкой. Я видел много использовавшихся OctopusDeploy, а также TeamCity, но все они в конечном итоге полагаются на командлеты Azure PowerShell, библиотеки управления в пользовательском коде или вызовы чистого REST API.

Другие вопросы по тегам