Close

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

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

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

В основе процесса CI лежит система контроля версий исходного кода. Система контроля версий дополняется другими средствами, такими как автоматизированные проверки качества кода, инструменты проверки стиля синтаксиса и многими другими.

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

[ПРОДОЛЖЕНИЕ]

Важность непрерывной интеграции

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

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

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

Зачем нужна непрерывная интеграция (CI)

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

Как можно использовать непрерывную интеграцию (CI)

CI обычно используется вместе с рабочим процессом Agile-разработки ПО. Организация подготавливает список заданий, составляющих дорожную карту продукта. Эти задания затем распределяются между участниками команды инженеров с целью поставки. С помощью CI ответственные разработчики могут выполнять эти задания по разработке ПО независимо и параллельно с коллегами. После завершения задания разработчик внесет проделанную работу в систему CI для интеграции с остальной частью проекта.

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

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

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

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

Плюсы и минусы непрерывной интеграции

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

Масштабируемость

CI позволяет организациям масштабировать команду инженеров, кодовую базу и инфраструктуру. CI помогает создавать рабочие процессы DevOps и Agile, минимизируя бюрократию при интеграции кода и избыточную коммуникацию. Благодаря этому каждый участник команды может внести изменение кода вплоть до выпуска. CI позволяет выполнять масштабирование благодаря удалению организационных зависимостей при разработке отдельных функций. Разработчики могут создавать функции самостоятельно и с полной уверенностью в том, что слияние их кода с остальной частью кодовой базы пройдет без проблем. Это основной процесс DevOps.

Улучшение цикла обратной связи

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

Улучшение коммуникации

CI оптимизирует обмен информацией и обеспечивает отслеживаемость среди инженеров, что повышает эффективность сотрудничества между разработчиками и операционным отделом в команде DevOps. Внедряя рабочие процессы с запросами pull и привязкой к CI, разработчики обеспечивают пассивный обмен знаниями. Запросы pull позволяют разработчикам просматривать и комментировать код участников команды. Разработчики теперь могут просматривать функциональные ветки и работать над ними вместе с коллегами по мере продвижения функций по конвейеру CI. Непрерывная интеграция также подходит для управления расходами на ресурсы. Эффективный конвейер CI с автоматизированным покрытием тестами и высокой достоверностью предотвращает регрессии и гарантирует соответствие новых функций спецификации. Перед слиянием новый код должен показать соответствие набору тестовых утверждений CI, обеспечивающих защиту от новых регрессий.

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

Внедрение и установка

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

Время на освоение технологии

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

Рекомендации по непрерывной интеграции (CI)

Разработка на основе тестов

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

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

Запросы pull и проверка кода

Большинство современных команд разработчиков ПО практикуют рабочий процесс, включающий запросы pull и проверку кода. Запросы pull критически важны для эффективной работы CI. Такой запрос создается, когда разработчик готов объединить новый код с основной кодовой базой. Запрос pull уведомляет других разработчиков о новых изменениях, подготовленных к интеграции.

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

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

Оптимизация скорости конвейера

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

Быстрый конвейер CI обеспечивает быстрый цикл обратной связи по продукту. Разработчики могут быстро продвигать изменения и экспериментировать с новыми идеями в сфере функциональности, чтобы повысить удобство использования. Любые ошибки можно быстро исправить и устранить по мере обнаружения. Ускорение работы не только дает вашим клиентам конкурентное преимущество, но и в целом повышает удобство использования.

Начало работы с непрерывной интеграцией

В основе CI лежит система контроля версий (VCS). Если целевая кодовая база для установки CI не имеет системы VCS, для начала нужно ее установить. Современные кодовые базы практически всегда оснащены системой VCS. Популярные решения включают Git, Mercurial и Subversion.

После установки системы VCS следует найти хостинг-площадку контроля версий. Большинство современных инструментов для хостинга контроля версий поддерживают CI и соответствующие функции. К популярным хостинг-площадкам контроля версий относятся Bitbucket, GitHub и GitLab.

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

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

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

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

Заключение

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

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

Существует множество инструментов для установки и управления CI от сторонних разработчиков. К популярным решениям относятся Codeship, Bitbucket Pipelines, Semaphore, CircleCI, Jenkins, Bamboo, Teamcity и многие другие. Эти инструменты снабжены подробными руководствами по настройке и документацией, которые помогут начать работу.

Одни из лучших инструментов CI предоставляются Atlassian. Bitbucket Pipelines и Bamboo — отличные утилиты, позволяющие использовать в проекте современные функции CI. Jira — один из самых популярных в мире инструментов по управлению проектами, которые следуют принципам Agile и DevOps. Jira тесно интегрируется с другими проектами Bitbucket и в сочетании с конвейером CI может дать очень четкое представление о том, как в организации обстоят дела с выполнением проектов.

Max Rehkopf
Max Rehkopf

Я считал себя «хаотичным раздолбаем», но методики и принципы agile помогли навести порядок в моей повседневной жизни. Для меня истинная радость — делиться этими знаниями с другими людьми, публикуя многочисленные статьи, участвуя в беседах и распространяя видеоматериалы, которые я создаю для Atlassian.