Непрерывная интеграция

menu icon

Непрерывная интеграция

В руководстве описывается непрерывная интеграция — практика разработки ПО и DevOps, подразумевающая объединение нового написанного разработчиком кода с основной веткой минимум раз в день.

Что такое непрерывная интеграция?

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

Непрерывная интеграция (CI), непрерывная доставка (CD) и непрерывное развертывание: в чем разница?

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

Непрерывная доставка следует сразу же за непрерывной интеграцией, автоматизируя доставку приложений в выбранные среды ИТ-инфраструктуры. Она автоматизирует развертывание изменений кода в различных средах: разработки, тестирования и производственной.

Преимущества

Самые заметные преимущества непрерывной интеграции:

  • Постоянный и видимый прогресс, позволяющий получить более точную обратную связь
  • Эффективное обнаружение ошибок на ранних этапах, а также наличие показателей, позволяющих устранять ошибки в кратчайшие сроки (иногда буквально через несколько минут)
  • Качественная командная работа: у каждого члена команды есть возможность изменения кода, интеграции системы и быстрого обнаружения конфликтов с другими компонентами ПО
  • Более эффективная интеграция системы, практически исключающая сюрпризы на финальном этапе цикла разработки ПО
  • Меньшее число параллельных изменений для слияния и тестирования
  • Сокращение числа ошибок в ходе тестирования системы
  • Постоянное обновление систем для тестирования

Непрерывная интеграция, гибкая разработка и DevOps

Адаптивность

Гибкая разработка — это практика разработки программного обеспечения, повышающая самоорганизацию групп разработчиков и помогающая быстрее адаптироваться к изменениям требований и выпускать ПО. Так как непрерывная интеграция (внешняя ссылка) и гибкая разработка (PDF, 153 КБ) имеют много общего (например, автоматизация тестирования), обе эти методики часто применяются одновременно. Методы гибкой разработки предполагают работу короткими циклами (или спринтами). Если применить эту комбинацию практик к DevOps, то проекты станут более гибкими, а на выходе мы получим более качественное ПО.

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

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

DevOps

В среде DevOps непрерывная интеграция находится в самом начале процесса разработки ПО, в ходе которого вы минимум раз в день передаете свой код, чтобы не допустить слишком большое расхождение своих локальных копий кода с основной веткой сборки. Это помогает избежать критических конфликтов при слиянии, способных «сломать» всю сборку и отнять у команды несколько часов или дней на исправление ситуации.

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

Инструменты непрерывной интеграции с открытым исходным кодом

Самые популярные инструменты непрерывной интеграции:

  • Jenkins: Широко используемый открытый инструмент для непрерывной интеграции Jenkins позволяет разработчикам автоматически компоновать, интегрировать и тестировать код сразу же после передачи изменений в центральное хранилище. Это позволяет разработчикам быстро находить ошибки и ускоряет развертывание ПО. В Jenkins доступен модуль Docker.
  • Buildbot: Buildbot способен автоматизировать все аспекты цикла разработки ПО. Это решение выступает в качестве планировщика заданий: ставит задания в очередь, выполняет их и создает отчеты о результатах.
  • Go: Инструмент Go отличается от остальных конвейерным принципом, упрощающим моделирование сложных процессов сборки.
  • IBM UrbanCode Build
  • Travis CI: Одно из самых старых и надежных распределенных решений, доступное также в локальной версии для предприятий.
  • GitLab CI: GitLab CI является неотъемлемой составляющей проекта Rails. Это бесплатная распределенная услуга, предоставляющая такие функции управления хранилищем git, как контроль доступа, отслеживание ошибок, проверки кода и многое другое.

Реализация непрерывной интеграции с помощью инструментов с открытым исходным кодом имеет ряд преимуществ:

  • Сотни внешних модулей для вашего проекта
  • Поддержка открытых языков, например Python, Java и JavaScript
  • Бесплатность, позволяющая студентам, молодым организациям и независимым разработчикам работать с мощными инструментами без ущерба для бюджета
  • Обширные возможности настройки: разработчики могут взять за основу инструмент CI и адаптировать его для своих целей
  • Возможность модифицировать и повторно распространять инструменты

Для вашего процесса разработки ПО рекомендуем выбрать такие открытые инструменты, как Jenkins, Go, Buildbot и Travis CI. Они подробно описаны в следующем разделе.

Сценарий использования

В следующем вымышленном примере демонстрируется, как два разработчика ПО могут улучшить свой процесс DevOps с помощью непрерывной интеграции.

Два разработчика должны постоянно согласовывать друг с другом, над какими функциями ПО они будут работать и как именно. Этой мини-команде нужны регулярные обновления, а также возможность интегрировать код и тестировать его как единое целое. В процессе разработки очень много времени уходит на планирование передачи изменений и тестирования кода. Эту проблему могла бы решить автоматизированная система непрерывной интеграции.

Процесс согласования графиков тестирования и передачи изменений кода отнимает уйму времени.

Так, разработчикам приходится оговаривать следующее:

  1. Время начала тестирования интеграции кода
  2. Способ проверки успешности интеграции
  3. Способ сообщения результатов команде

Платформы непрерывной интеграции не только способны с легкостью решить такие задачи, но и в большинстве своем открыты для настройки и адаптации.

Как правило, платформы типа Jenkins начинают тестировать интеграцию сразу же при передаче изменений кода. При передаче нового кода система непрерывной интеграции запустит набор тестов, в который могут входить тесты функций и регрессионные тесты. После тестирования станет понятно, успешно ли был интегрирован код.

Если вы пишете на компилируемом языке, то по умолчанию будет тестироваться компиляция кода. Если скомпилировать новый код не удалось, то он «сломает» сборку. Для таких языков, как Python или JavaScript, потребуется создать собственный тест интеграции.

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

Серверы

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

  • Централизованное выполнение автоматических сборок, тестов и выпусков
  • Развертывание любой версии в любое время
  • Поддержание конфигурации в порядке
  • Использование дополнительных модулей для расширения функционала
  • Мониторинг хранилища проекта
  • Извлечение изменений и выполнение установленных задач для успешной передачи изменений кода
  • Отправка участникам проекта подробной информации о сборке

Важность тестирования

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

Если у вас только один этап тестирования, то оно будет составлять как минимум 30% от всего процесса непрерывной интеграции. Но по факту непрерывная интеграция на 50–70% состоит из тестирования. Раньше приходилось выполнять тестирование вручную. Сейчас в вашем распоряжении есть автоматизированные тесты, что заметно повышает вероятность успешной интеграции.

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

Конвейер непрерывной интеграции

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

Передовые методы

Процесс непрерывной интеграции — это ключевой компонент DevOps, помогающий посредством общего хранилища объединить группы разработки и эксплуатации для программирования, тестирования, развертывания и поддержки ПО. Практические рекомендации, помогающие успешно внедрить непрерывную интеграцию:

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

Непрерывная интеграция и IBM Cloud®

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

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

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

Сделайте следующий шаг:

— Начните управлять своими сборками ПО, в том числе масштабированием и настройкой, с помощью IBM® UrbanCode® Build.

— Узнайте о пяти важнейших слагаемых успешной автоматизации (внешняя ссылка) из этого отчета HFS Research.

Начните работу с учетной записью IBM Cloud прямо сегодня.