Автоматизация сборки против автоматизации развертывания против непрерывной интеграции

12

Я хочу стать более эффективным и эффективно использовать инструменты ops.

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

Я на самом деле работаю с костюмами Jetbrains в своей работе (IntelliJ, WebStorm ...), поэтому я хотел продолжать использовать их, и я хотел использовать TeamCity, который, казалось, был отличным инструментом с множеством плагинов для непрерывной интеграции.

Моя проблема в том, что я не знаю, в чем разница между:

  • автоматизация зданий (TeamCity - это программное обеспечение): я знаю, что мы можем создать наше приложение с удаленным хранилищем VCS, и это здорово, но какова главная цель этого? Какая информация важна при этом? Фактически, я уже знаю, собирается ли мое программное обеспечение локально, и мои товарищи по команде тоже. Итак, какова цель использования его без развертывания автоматизации?

  • развертывание автоматизации (похоже, TeamCity не делает это легко)

  • непрерывная интеграция (которая, кажется, является соединением двух вышеупомянутых)
  • Непрерывная доставка (что именно? Почему она отличается от непрерывной интеграции?)

Можете ли вы помочь мне понять это немного больше?

mfrachet
источник
Это автоматизация, а не движение.
Флориан Маргейн
Он работает на моей машине недостаточно хорошо, так как полагается на обороты, чтобы каждый раз поступать правильно. Такие вещи, как новые зависимости или другие изменения в составе команды, в сочетании с вашими теперь нарушают тест.
Энди

Ответы:

15

Википедия дает довольно хорошее резюме большинства этих терминов. Вот мой взгляд на них:

  • Автоматизация сборки - это автоматизация создания программного обеспечения вместо вызова компилятора вручную. Это может быть достигнуто с помощью таких инструментов, как, например, Make или Ant .

  • Автоматизация развертывания - это сборка встроенного программного обеспечения и его развертывание или установка в тестовой или производственной системе.

  • Непрерывная интеграция означает, что автоматизированный процесс непрерывно создает ваше программное обеспечение, поскольку разработчики проверяют код и запускают модульные тесты, чтобы гарантировать, что код все еще работает. Например, каждые 15–30 минут сервер может просыпаться, сканировать VCS на предмет новых проверок, а затем обновлять и создавать проект, если были внесены какие-либо изменения. Помимо выполнения этапов компиляции, это также прекрасная возможность для запуска автоматических модульных тестов и проверок качества кода .

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

По крайней мере, вам нужна автоматизация сборки, то есть какой-то сценарий сборки. Это позволяет вам нажать одну кнопку или выполнить одну команду для построения вашего проекта. Преимущество этого заключается в уменьшении количества ошибок при выполнении шагов вручную. Сложные среды сборки могут включать в себя генерацию кода (например, DAO из конфигов, интерфейсный код, такой как JAXB ), компиляцию кода, его упаковку, настройку метаданных и т. Д. Для выполнения множества задач необходим контрольный список: почему бы не сделать контрольный список ваш сценарий сборки и использовать инструмент для его запуска? Это уменьшает ошибки и обеспечивает последовательность.

Далее следует CI: это действительно хорошо иметь, но не обязательно. Это помогает выявить проблемы сборки на ранней стадии. Если у вас есть несколько разработчиков, проверяющих код в течение дня и, возможно, не синхронизирующих свои рабочие области постоянно, существует риск, что их изменения будут мешать друг другу. Я имею в виду именно ошибки статического кода, а не конфликты контроля версий. Сервер сборки CI снизит этот риск.

Наконец у нас есть шаги развертывания. Идея заключается в том, чтобы сэкономить время и уменьшить количество ошибок при развертывании программного обеспечения вручную. Как и в случае с автоматизацией сборки, существует сто способов испортить развертывание программного обеспечения. Я лично задерживался в офисе, чтобы решить проблемы с ручным развертыванием во многих случаях, когда нам нужна работающая система для клиентов, прибывающих завтра на место. Автоматизация нескольких систем создает больший риск: вместо того, чтобы одна система могла выйти из строя или иметь странные ошибки, теперь у нас есть несколькосистемы, которые могут пойти не так. Однако этот риск намного ниже, чем если бы кто-то пропустил шаг в контрольном списке или ввел неправильную команду и испортил развертывание. Если вам повезет, вы можете просто восстановить резервную копию БД и начать заново, если вам не повезет, ошибка может привести к неправильной работе системы. Это программный дефект? Не правильно ли техник установил конфигурацию? Это требует времени для диагностики, времени, которого у вас может не быть, и времени, которое не нужно тратить, если вы автоматизируете процесс.


источник
Итак, можем ли мы признать, что такие инструменты, как TeamCity, которые позволяют создавать что-то из удаленной VCS, можно рассматривать как CI-сервер? Как объединение кодов разработчиков из веток VCS и сборка последней версии из инструмента автоматизации зданий?
mfrachet
1
Я не знаком с TeamCity, но, похоже, это CI-сервер . Большая часть моего опыта связана с Jenkins CI , включая автоматическое развертывание.
@Skahrz, если вы хотите автоматизировать развертывание, у вас есть такие опции, как BuildMaster (также сервер CI) и Octopus Deploy.
Энди
Вы описываете Непрерывные сборки вместо Непрерывной Интеграции. Последний также требует проверки того, что вещи действительно работают, когда соединены ..
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen вы правы, спасибо. Я обновил свой ответ, чтобы упомянуть тестирование с помощью CI.
0
  • Непрерывная интеграция - это практика объединения всех изменений разработчиков в общую магистраль несколько раз в день. Эта практика в настоящее время настолько повсеместна, что может показаться не столь существенной, однако традиционно команды работают над программным обеспечением в течение нескольких недель или даже месяцев в изоляции. Результатом стал «Ад интеграции», когда отдельные потоки работ были объединены вместе. Непрерывная интеграция обычно используется с автоматическими сборками общей магистрали для раннего обнаружения проблем, но она больше связана с частыми коммитами и рабочим процессом разработчика, чем с DevOps.

  • Автоматические сборки полезны для выявления проблем, которые могут привести к локальному прохождению сборки, но сбою на сервере сборки (например, вы забыли проверить файл, зависимости на сервере сборки не совпадают). Наличие сервера сборки для обнаружения этих проблем означает, что вы можете исправить их раньше, чем ваши товарищи по команде.

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

  • Непрерывное развертывание - это следующий логический шаг - автоматическое развертывание каждого коммита, который успешно проходит через конвейер непрерывной доставки. У этой практики есть несколько преимуществ, но для меня главная идея в том, что небольшие частые коммиты менее рискованны.

Я рекомендую прочитать эту книгу для получения дополнительной информации:

Джастин
источник
-2

Teamcity, как и многие другие инструменты для сборки, является лишь центральным приложением, которое позволяет вам выполнять множество различных задач. Это включает выполнение сборок, таких как сборки CI, сборки полного выпуска, и это позволяет вам выполнять развертывания. Если вы используете teamcity для вызова ant или nant для запуска msbuild для файла решения, вы также можете вызвать сценарии nant, которые будут выполнять развертывания. Это может потребовать немного сценариев, но это не сложно.

Мы используем teamcity и bamboo для полных CI, Database CI и развертываем в среде INTegration. Затем мы используем teamcity для полной сборки релизов и автоматического создания сценариев переноса БД. Они проверяются в SVN с помощью заданий teamcity, обращающихся к скриптам nant. Для развертываний, как вы уже догадались, мы используем teamcity для вызова nant для выполнения задач развертывания. Это работает хорошо, так как агент teamcity общается с сервером teamcity, и агент может существовать на одном из серверов в зоне DMZ, что помогает перемещать код за пределы брандмауэров и т. Д. Таким образом, teamcity или bamboo - все, что вам нужно для обработки всего сценария. ,

Ланс Лайонс
источник
2
это , кажется, не предлагает ничего существенного по точкам сделанных и объяснено в предшествующем уровне ответа
комар