Термин из глоссария

CI/CD

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

Что такое CI/CD?

CI/CD, или непрерывная интеграция/непрерывная доставка или развертывание, является практикой разработки программного обеспечения, обеспечиваемой автоматизацией. Частые, надежные обновления ускоряют циклы выпуска через непрерывную доставку кода.

Объяснение CI/CD

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

Три руки, держащие лампочку

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

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

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

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

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

Непрерывная интеграция - это простой и бесшовный процесс, который начинается на этапе разработки и заканчивается в тестовой среде. Непрерывная интеграция позволяет всем разработчикам работать совместно и отслеживать свой код. Каждый разработчик "коммитит" свой код небольшими инкрементами в общий репозиторий кода, также известный как основной репозиторий. Репозиторий кода поддерживается в системе управления версиями, такой как Unity VCS, Perforce или Git. Каждый коммит, сделанный в основной ветке репозитория (или дочерних ветках, если вы выберете), может инициировать автоматизированный процесс сборки, связанный с системой управления сборками, которая берет код и создает сборку. После того как код объединен в систему сборки, разработчики получают полный доступ к своим сборкам кода. Отсюда они могут увидеть, правильно ли скомпилирован их код или есть ли ошибка, которую им нужно исправить. Системы сборки могут быть настроены для поддержки различных тестовых фреймворков.

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


Правила и принципы CI

- Поддерживайте один центральный репозиторий кода

Временное хранение кода от различных разработчиков в разных командах в отдельных репозиториях или системах должно быть сведено к минимуму.

- Часто коммитите/загружайте код в основной репозиторий

Чем дольше разработчик удерживает код без сборки или тестирования, тем более вероятно, что он будет несовместим с тем, что хранится в центральном репозитории.

- Поддерживайте отдельные серверы для сборки и тестирования

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

- Сборки и тесты должны быть автоматизированы

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

- Используйте тестовые среды, похожие на производственные

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

- Команды обеспечения качества должны иметь доступ к сборкам

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

Циклы непрерывной интеграции и непрерывной доставки

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

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

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

Что такое непрерывная доставка?

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

С непрерывной доставкой цель состоит в том, чтобы изменения были достаточно малы, чтобы никакие обновления основной сборки не компрометировали статус «готовности к производству» финального продукта. Финальный продукт может содержать незначительные ошибки, но ничего такого, что могло бы существенно повлиять на пользовательский опыт.

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

Что такое непрерывное развертывание?

Непрерывное развертывание направлено на то, чтобы постоянно развертывать изменения кода в производственной среде из центрального репозитория, как только сборка становится стабильной. Команда операций развертывает скомпилированный код и устанавливает программное обеспечение в различных средах (разработка/тестирование, предварительная версия и производство). Каждое изменение проходит через автоматизированный конвейер, который отправляет рабочую версию приложения в производство. Развертывание может принимать различные формы. Темное развертывание – это развертывание, которое скрыто от пользователей, в то время как функциональные переключатели или переключатели могут использоваться для развертывания конкретных подмножеств изменений для группы пользователей для тестирования и обратной связи.

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

Как связаны CI/CD и DevOps?

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

Регулярные, частые выпуски программного обеспечения могут быть достигнуты с помощью конкретных инструментов и продуктов, позволяющих интеграцию, доставку и развертывание изменений кода - это называется конвейером CI/CD.

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

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

Преимущества CI/CD

- Быстрая итерация

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

- Чище код

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

- Быстрее исправление ошибок

Частое объединение небольших наборов изменений с помощью CI/CD упрощает выявление ошибок в коде и их исправление до того, как они станут более серьезной проблемой.

- Короче циклы обратной связи

CI/CD помогает сократить циклы обратной связи – основополагающий принцип DevOps – потому что меньшие, итеративные изменения легче интегрировать, тестировать и развертывать.

- Улучшенная командная работа

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

- Более довольные клиенты

Поскольку сборки всегда готовы к выпуску с CI/CD, клиенты испытывают меньше перерывов в обслуживании, и их отзывы могут быть интегрированы гораздо быстрее.

Является ли agile тем же самым, что и CI/CD?

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

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

Как часто вы должны развертывать в продуктивную среду с помощью непрерывного развертывания?

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

1. Это критическая или незначительная ошибка?

2. Вы отслеживаете количество регрессий от сборки к сборке?

3. Существует ли команда контроля качества?

4. Есть ли в кодовой базе модульные тесты?

5. Есть ли дублирование кода?

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

Стоит ли непрерывное развертывание?

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

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

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

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

Назад к глоссарию