I would like to view this page in
Непрерывная интеграция (continuous integration, CI) — это практика, при которой код автоматически собирается и тестируется после каждого слияния изменений.
Непрерывная интеграция (CI) — DevOps-практика, которая помогает командам работать эффективнее и выпускать более качественное ПО. При каждом слиянии изменений CI-сервер автоматически собирает и тестирует код, быстро предоставляя обратную связь. Быстрый и надежный цикл обратной связи позволяет чаще выпускать обновления и уменьшает количество багов, попадающих в продакшн.
Чтобы понять, зачем нужна непрерывная интеграция, полезно представить, как выглядит разработка без нее. Допустим, вы работаете с системой контроля версий, например, с Git. У вас и у каждого из ваших коллег есть своя копия репозитория, которую вы используете для локальной разработки, а затем вы загружаете написанный код в общий репозиторий.
Если вы разрабатываете новую функцию, то можете работать над ней несколько дней, прежде чем поделитесь изменениями. За это время ваши коллеги тоже создадут новые функции в своих копиях репозитория. Когда вы закончите, все отправляют изменения в общий репозиторий и начинают объединять их в отдельную ветку, чтобы протестировать, как каждая функция работает в сочетании с остальными.
Из-за того, что изменения делают несколько человек, есть риск, что код не будет собираться. Вы с коллегами потратите много времени на поиск изменений, из-за которых возникли проблемы, чтобы либо окатить эти коммиты и поскорее выпустить более срочные изменения, либо исправить код и устранить проблемы.
Когда код удастся собрать, вы можете обнаружить, что из-за объединения разных изменений возникло множество багов. И снова вам придется анализировать все изменения кода от каждого участника, чтобы найти причины ошибок, исправить их и заново начинать сборку.
Непрерывная интеграция ускоряет этот процесс: сборка и тестирование выполняются автоматически при каждом слиянии изменений с указанной веткой. После автоматизации этих этапов вы сможете выполнять их чаще: вместо сборки и тестирования кода раз в несколько недель можно делать это каждые несколько часов.
Работая с небольшими изменениями, вы будете быстрее находить и устранять ошибки, которые могут возникнуть из-за ваших правок. Вместо просмотра сотен и тысяч строк кода в поисках причины проблемы вам нужно проверить лишь небольшой объем изменений. К тому же, эти изменения свежи в вашей памяти, и не нужно тратить время на переключение между задачами.
CI помогает поддерживать код в рабочем состоянии, проверяя, что программа собирается и работает как нужно после каждого изменения. Это упрощает релизы и позволяет чаще выпускать новые функции и исправления.
Хотя непрерывная интеграция была придумана для решения проблем, возникающих на больших проектах со множеством участников, ее можно использовать в процессе разработки любого ПО. Даже если вы соло-разработчик, короткие циклы разработки с использованием автоматических тестов для оперативной проверки изменений позволяют работать эффективнее и писать более качественный код.
Чтобы CI-пайплайн работал эффективно, необходимо сочетание правильных инструментов, процессов и командных правил. Рассмотрим каждую из этих составляющих.
Для успешного внедрения непрерывной интеграции весь код должен храниться в системе контроля версий. Это касается не только исходного кода, но и библиотек, конфигурационных файлов и скриптов. Система контроля версий упрощает параллельную работу разработчиков и обмен изменениями в коде. CI-серверы интегрируются с такими системами для автоматической сборки и тестирования изменений.
Все участники проекта должны использовать один репозиторий и регулярно публиковать изменения. Оптимально отправлять изменения в CI-ветку хотя бы раз в день, а лучше чаще. Также важно поддерживать синхронизацию локальных копий с основным репозиторием, чтобы минимизировать риски конфликтов при слиянии.
Следующий шаг после слияния изменений — сборка решения и проведение автоматизированных проверок: линтинга, юнит-тестирования и статического анализа. Сборка и/или тестирование вручную занимает много времени, при этом велика возможность ошибок, так что ежедневно интегрировать изменения будет неудобно. Именно поэтому так важна автоматизация. Инструменты для сборки и тестирования доступны для большинства языков программирования, а с помощью CI-сервера можно настроить автоматическое выполнение всех этих шагов.
Чтобы непрерывная интеграция приносила максимум пользы, каждый участник проекта должен быстро реагировать на ошибки в сборке или тестах. Это гарантирует, что все участвуют в создании надежной базы, не пытаясь добавить новые функции к неработающему коду. Может показаться, что разработчикам приходится отвлекаться на исправление ошибок, но автоматизированный CI-процесс дает результат всего за несколько минут. Это позволяет быстро разобраться с проблемами, пока внесенные изменения еще свежи в памяти.
После автоматизации сборки и тестов нужно обеспечить поддержку CI-пайплайна: добавлять юнит-тесты по мере появления нового кода и поддерживать скорость циклов обратной связи.
Если вы добавите <>сервер непрерывной интеграции, который осуществляет мониторинг репозитория, запускает сборку, выполняет автоматизированные тесты и создает отчет о результатах, это поможет собрать вместе все фрагменты и сэкономит время на написание собственной логики автоматизации. Кроме того, правильно настроенный CI-сервер может давать дополнительную информацию, например, метрики покрытия кода и историю сборок.
Разобравшись в том, какие преимущества дает непрерывная интеграция, вам будет проще убедить других членов команды попробовать новый подход к работе, а всех заинтересованных лиц — поддержать новые процессы.
Вот что дает CI как отдельным разработчикам, так и командам в целом:
Непрерывная интеграция удобна и бизнесу в целом:
Подробнее о преимуществах непрерывной интеграции, доставки и развертывания читайте в нашем руководстве «12 преимуществ CI/CD».
Непрерывная интеграция дает преимущества и самим разработчикам, и компании в целом, но не все ее охотно принимают.
Для многих команд разработки DevOps означает большие изменения в подходе к работе, что требует пересмотра существующих процессов. Чтобы координировать усилия разных команд и добиться подлинного сотрудничества, необходима своевременная коммуникация.
Если вы уже используете Agile-методологию, вам будет легче приспособиться, поскольку вы уже понимаете, насколько важно постоянно получать обратную связь, и привыкли к самоорганизации команды.
В противном случае вам необходимо осознать масштаб необходимых изменений при внедрении CI, обсудить это с коллегами и начать понемногу использовать описанные принципы, демонстрируя их преимущества по ходу работы.
При этом внедрению непрерывной интеграции мешают и чисто практические проблемы. Время сборки может быть большим, если вы работаете над крупным монолитным приложением, а запускать тесты параллельно бывает сложно, если не хватает ресурсов для тестовых сред.
Визуализация процессов непрерывной интеграции и использование метрик для выявления узких мест помогут оценить затраты и преимущества вложений в изменение архитектуры, расширение инфраструктуры и покрытие автоматизированными тестами.
Настройка CI-пайплайна может показаться очень трудозатратной. О многом нужно подумать, множество вещей автоматизировать. К счастью, этот процесс легко разбить на небольшие этапы, и каждый из них даст новые преимущества.
Вот с чего можно начать:
Подробнее о настройке CI и CD читайте в нашем руководстве по лучшим практикам CI/CD.
Внедрение непрерывной интеграции позволяет ускорить разработку и повысить качество кода. Автоматизация этих шагов помогает работать эффективнее и сосредоточиться на создании функций, которые необходимы пользователям. Однако непрерывная интеграция — лишь первый шаг к реализации CI/CD-пайплайна. За ним следует непрерывная доставка, где принципы DevOps применяются к следующему этапу процесса выпуска ПО.
TeamCity — гибкая CI/CD-платформа, которую можно настроить в соответствии со своими нуждами. Она поддерживает все популярные системы контроля версий, включая Git, Perforce, Mercurial и Subversion, а также инструменты сборки и тестирования для основных языков программирования. Большой выбор триггеров CI-пайплайна позволяет запускать процесс сборки и тестирования после каждого коммита в выбранную ветку, выполнять определенный набор проверок для веток функций, планировать сборку на ночное время, а также предоставить членам команды право выполнять проверки в рамках CI локально.
Чтобы вы как можно скорее получали обратную связь, TeamCity может выполнять тесты и другие задачи параллельно. Интеграция со Slack и IDE позволяет получать обратную связь, где бы вы ни работали, а подробные отчеты о тестировании помогают быстро найти причину сбоя. Кроме того, TeamCity предлагает много метрик, чтобы вы могли оптимизировать CI-пайплайн и оценить покрытие кода юнит-тестами.
Если вы захотите расширить автоматизацию и добавить к CI-пайплайну непрерывную доставку или развертывание, в TeamCity есть все необходимые инструменты для управления средами и автоматизации развертывания.
Непрерывная доставка (CD — Continuous delivery) предполагает автоматизацию ручных шагов, необходимых для сборки и выпуска ПО.
Именно в непрерывном развертывании DevOps-технология автоматизации сборки, тестирования и развертывания получила свое наибольшее логическое развитие.
Рассказываем, как создать в TeamCity цепочку сборок, настроив зависимости снэпшотов в конфигурациях сборки.