В чем преимущества CI/CD?

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

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

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

Ускоренный срок вывода продукта на рынок

Главное предназначение CI/CD-пайплайна — быстро и часто предоставлять пользователям рабочее программное обеспечение.

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

В условиях постоянной конкуренции, понимания пользовательских нужд, инновационной функциональности и надежности кода может оказаться недостаточно. Автоматизированный CI/CD-пайплайн позволит вам доставлять изменения еженедельно, ежедневно или даже ежечасно.

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

Уменьшение рисков

Ускорение Time to Market полезно не только для поддержки конкурентоспособности. Благодаря частым релизам продуктовые менеджеры и маркетологи могут активнее участвовать на разработке.

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

Меньше времени на ревью

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

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

Улучшение качества кода

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

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

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

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

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

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

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

Накатанная дорога в продакшн

Как мы знаем, повторение — мать учения. И это касается не только игры в баскетбол или выучивания музыкальных гамм, но и релиза ПО. Внедрять CI/CD лучше поэтапно: нужно начать с техник CI и затем постепенно выстраивать пайплайн. Делая развертывание изменений чаще, вы выявите болевые точки процесса и те этапы, которые тормозят его. Это может быть, например, обновление данных тестового окружения или необходимость перенастройки параметров перед развертыванием на том или ином устройстве.

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

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

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

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

Эффективная инфраструктура

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

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

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

Измеряемость прогресса

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

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

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

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

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

Частые релизы также дают вам возможность экспериментировать с альтернативными моделями и поведением: вы можете запускать сравнительное A/B-тестирование либо сопоставлять результаты по мере выпуска новых версий.

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

Совместная работа и коммуникация

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

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

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

Many of the CI/CD tools available to help manage your build also make it easier for non-developers to see what is in train, while access to staging environments allows them to engage with and provide feedback on what is being built. Также вы можете делиться информацией о выпускаемой функциональности, метриками использования и результатами экспериментов — это расширит коммуникацию, которая в свою очередь способствует инновациям.

Максимум креативности

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

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

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

Заключение

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

И хотя название «DevOps» указывает лишь на команды Dev- и Ops-специалистов, создание CI/CD-пайплайна подразумевает взаимодействия множества разных команд. Оптимизация шагов, необходимых для релиза продукта, поможет вашим коллегам лучше понять, как используется ваш продукт. Вы сэкономите людям время, и они смогут посвятить больше времени инновациям.