Continuous Integration VS Continuous Delivery VS Continuous Deployment: розбираємося у найважливішій практиці DevOps
Привіт. Це Гліб Сметанін — DevOps компанії MAUDAU. Сьогодні поговоримо про конвеєр СI/CD та його значення для DevOps-процесу. Якщо ви працюєте у сфері розробки програмного забезпечення, то цілком розумієте, наскільки велике значення тут мають швидкість та адаптивність. Концепції безперервної інтеграції (CI), безперервної доставки (CD) та безперервного розгортання (CD) використовуються саме для цього — максимального прискорення процесу випуску продукту за умови збереження надійності та прозорості усього процесу.
Конвеєр СI/CD приносить компанії кілька вагомих переваг. Перше та основне — це безкомпромісна якість коду. Впровадження цього процесу допоможе повністю автоматизувати тестування і легко бачити всі проблеми в реальному часі. Завдяки цьому код випускається швидше, людина менше втручається у процес, витрати оптимізуються, а відновлення коду відбувається простіше.
А також CI/CD дає розробникам можливість:
- синхронізувати всю команду;
- ефективно працювати з беклогом;
- відстежувати дрібні помилки у великих блоках коду;
- швидко відкотити реліз після виявлення непередбачуваних проблем;
- оптимізувати швидкість випуску ПЗ;
- бачити перелік усіх змін на продакшені.
Далі ми детальніше розберемося в тому, що являє собою кожна складова ланцюга СI/CD/CD, чим вони відрізняються та коли використовувати кожну з них.
Швидко про головне: що таке CI/CD/CD
Безперервна інтеграція, безперервна доставка та безперервне розгортання — складові DevOps-підходу до розробки та апгрейду ПЗ. За допомогою них можна налаштувати безперервне конвеєрне тестування, збірку, доставку та розгортання оновлень. Компоненти можна застосовувати окремо (наприклад, тільки CI або CI + CD), або використовувати їх послідовно в рамках єдиного процесу (CI + CD + CD).
Роль CI/CD в DevOps
Конвеєр CI/CD якнайкраще вписується в культуру DevOps, адже вона — про ефективне співробітництво, автоматизацію та швидкий зворотній зв’язок. Так створюється середовище, в якому команда працює максимально продуктивно.
Роль CI, CD та CD у DevOps можна порівняти з роботою добре налагодженої фабрики, де кожен етап виробництва автоматизований, точний та ефективний. Ось основні переваги конвеєра, які я би виділив:
- Автоматизація процесів. Необхідність ручного втручання (як і ризик виникнення помилки) знижується до мінімуму, а ефективність, навпаки, підвищується.
- Поліпшення якості та швидкості розробки. За допомогою CI/CD можна миттєво виявляти та усувати помилки, забезпечуючи постійну якість коду. Час, що вимагається на розробку, також значно скорочується.
- Безперервний і швидкий фідбек. CI/CD дозволяє командам оперативно отримувати зворотний зв’язок про те, як кожна зміна впливає на продукт. Це призводить до швидкого вирішення проблем і поліпшення користувальницького досвіду.
- Спільна робота. Декілька розробників можуть одночасно працювати над одним продуктом, не заважаючи один одному. Конвеєр спрощує робочий процес для команд будь-якого розміру.
З CI/CD легко масштабувати процеси розробки і адаптуватися до вимог проекту, що змінюються. І це не просто технологія, а ціла культура, що дозволяє створювати більш динамічне, гнучке та інновативне середовище.
Безперервна інтеграція (CI)
Безперервна інтеграція передбачає виконання традиційних кроків з інтеграції безпосередньо в процесі розробки, не чекаючи завершення роботи над кодом, збірки всієї системи докупи і тестування. Таким чином можна швидко виявити найдрібніші помилки і проблеми.
CI складається з багатьох елементів, і ось — основні з них. Кожен запускається і виконується в автоматичному режимі:
- централізація коду для зручності злиття змін;
- автоматизована збірка — компіляція вихідного коду у працюючий артефакт;
- тестування для перевірки якості коду;
- збереження протестованого артефакту у репозиторій;
- перевірка готовності функцій до випуску — тестування збереженого артефакту у ізольованому середовищі.
Значна увага в рамках процесу приділяється автоматизації тестування для перевірки програми. Це важливо для того, щоб знати, чи виникає проблема при інтеграції в основну гілку. З безперервною інтеграцією розробники публікують свої зміни, роблячи комміти в систему контролю версій принаймні щодня. Регулярно перевіряючи, чи проходить оновлена збірка всі тести, знайти проблему стає простіше — для цього кожного разу вам потрібно буде проаналізувати зовсім маленьку кількість змін. Це також дозволяє легше вносити правки.
Безперервна інтеграція часто реалізується в тандемі з безперервною доставкою. Таким чином можна покращити якість ПЗ, скоротити кількість помилок, що допускаються вручну, прискорити цикл випуску та загалом зекономити час і ресурси команди.
Як правильно налаштувати СІ-процес
Ось що допоможе вам побудувати успішний процес безперервної інтеграції:
- Використання системи контролю версій (варто перенести туди весь код і адаптувати до неї розробників).
- Автоматизація тестів.
- Максимально ранні та часті комміти.
- Виконання збірки при кожному коміті.
- Подальший аналіз автоматизованих збірок та тестів.
Окрім цього, важливо впровадити в команді повноцінну DevOps-культуру, де кожен несе відповідальність за усунення помилок у коді та уникає звинувачення того, чий коміт був останнім. Елементи CI, що я зазначив вище, забезпечують швидкий зворотній зв’язок з боку коду та прискорюють процес випуску якісних проектів.
Безперервна доставка (CD)
Безперервна доставка — наступний рівень після безперервної інтеграції. За допомогою CI+CD нову версію можна не тільки створити та протестувати при кожній зміні коду, що реєструється в репозиторії, але й автоматично запустити за допомогою одного натискання кнопки. Тут до ланцюга етапів безперервної інтеграції додається етап деплою.
Таким чином крім автоматизованого тестування у нас тепер є і автоматизований процес випуску. І нехай запуск розгортання все ще відбувається вручну (ту саму кнопку все ж треба комусь натиснути), з безперервною доставкою ви зможете випускати зміни маленькими партіями з будь-якою частотою, необхідною вашому бізнесу: щодня, щотижня, раз на два тижні або рідше.
Варто зазначити: щоб оцінити головні переваги безперервної доставки, розгортання все ж таки краще запускати якнайчастіше. Випускаючи невеликі партії, можна швидко виявити проблеми і внести коригування. Кроки, з яких складається процедура доставки, залежать від потреб вашого бізнесу та користувачів. Часто можливості CD передбачають попереднє тестування коммітів, відображення процесу виконання в режимі реального часу і багато інших цікавих функцій.
Головні компоненти СD: що важливо врахувати
Щоб ефективно реалізувати конвеєр СI/CD, вам необхідно мати на увазі наступні нюанси:
- Виконуйте збірку одноразово, щоб переконатися, що артефакт пройшов усі попередні стадії тестування.
- Зберігайте всі конфігураційні файли у VCS.
- Виконуйте розгортання автоматично за допомогою скрипту.
- Перед кожним розгортанням скидайте налаштування оточення до одного і того ж вихідного набору умов.
- Чітко розділяйте програму та змінні чи параметри середовища.
- Створюйте автоматизований пайплайн лише у тому випадку, якщо ваша команда готова його підтримувати.
Коректно налаштувавши безперервну доставку, ви зробите процес розгортання ПЗ менш складним, завдяки чому вашій команді не потрібно буде витрачати дні на підготовку до випуску, а цикл зворотного зв’язку з клієнтами стане якомога коротшим.
Безперервне розгортання (СD)
Подовжений етап безперервної доставки призводить до фази безперервного розгортання (CI+CD+CD) — заключного етапу в конвеєрі автоматичного випуску змін з репозиторію у виробництво. Це та сама кнопка, яку необхідно було натиснути в попередньому елементі ланцюжка, тож тепер безпосереднє твердження з боку розробника не потрібно, і deploy to production виконується автоматично.
Якщо зміна успішно проходить усі попередні стадії пайплайну, вона самостійно потрапляє у продакшн. Таким чином можна швидко доставляти користувачеві оновлення, не жертвуючи якістю. Цей крок дозволяє значно прискорити виробничий цикл і швидше отримувати зворотний зв’язок від клієнтів (а ще мінімізувати ймовірність помилки, адже в цьому випадку автоматизовано буквально все). Але варто зауважити, що використовувати CD варто лише у тому разі, якщо ви повністю впевнені у вашій автоматизації.
Що спільного в цих складових та кому підійде кожна з них
Безперервна інтеграція є частиною як безперервної доставки, так і безперервного розгортання. А безперервне розгортання, у свою чергу, дуже схоже на безперервну доставку, за винятком того, що випуск тут відбувається автоматично. Нижче ми трохи докладніше поговоримо про різницю між CD та CD, оскільки ці терміни особливо схожі один на одного і в них простіше заплутатися. А зараз розберемося, яким компаніям та проектам підійде кожен із компонентів.
Якщо ви тільки починаєте новий проект, в якому ще немає користувачів, можна обмежитися безперервною інтеграцією, вручну випускаючи і розгортаючи кожну зміну. CI підходить для проектів будь-якого розміру, але особливо корисною буде великим командам з багатьма розробниками. Якщо зміни до коду одночасно і регулярно вносять різні люди, СI покаже, чи можна його об’єднати без шкоди для функціональності. Це відмінний варіант для компаній, що займаються розробкою ПЗ або мобільних додатків, а також всіх інших проектів, які вимагають потоянної інтеграції нового коду в основну базу.
Безперервна доставка знадобиться у тих випадках, коли потрібно швидко випускати нові функції та оновлення, забезпечуючи при цьому високу надійність та стабільність. Вона підійде компаніям, у яких особливе значення має швидкий цикл розробки та релізу: стартапам, веб-сервісам та іншим проектам, де оновлення потрібно якнайшвидше доставляти користувачам.
А от безперервне розгортання варто використовувати компаніям із постійним потоком оновлень. Якщо ваші проекти мають стабільну базу користувачів, а нові функції повинні з’являтися регулярно і без затримок, це — ваш випадок. CD пропонує максимальний рівень автоматизації, який потрібен великим технологічним компаніям, SaaS-платформам та онлайн-сервісам, яким необхідно постійно розгортати оновлення в автоматичному режимі.
Вибір між CI,
Ключові відмінності між Continuous Deployment та Continuous Delivery
Останнє, що залишилось — це детальніше розібрати відмінності між безперервною доставкою та безперервним розгортанням. Поняття дуже схожі між собою, і навіть абревіатури у них однакові, проте кожне з них відображає окремий рівень автоматизації.
Як ми вже говорили раніше, Continuous Delivery — це процес, при якому весь код, що пройшов фазу безперервної інтеграції, автоматично переноситься в тестове середовище чи препродакшн. Ключове тут — готовність до релізу у будь-який момент, але фінальне рішення про випуск все одно залишається за людиною.
А у разі Continuous Deployment після успішного проходження всіх тестів зміни автоматично розгортаються у продакшн середу. Тут немає ручного етапу затвердження; кожна зміна, що пройшла тести, негайно стає доступною для користувачів.
Безперервна доставка залишає за вами більше контролю, що може бути важливим, наприклад, у середовищі зі строгими нормативними вимогами. А безперервне розгортання вимагає високого рівня довіри до процесів тестування, але водночас сприяє максимально швидкому впровадженню нововведень та безперервному оновленню продукту.
В обох моделях центральне місце посідає зворотний зв’язок. У Continuous Delivery він здійснюється від команди, яка приймає рішення про дозвіл, а в Continuous Deployment — безпосередньо від користувачів та систем моніторингу.
Загалом, всі три підходи (CI, CD, CD) орієнтовані прискорення процесу розробки та поліпшення якості продукту. Щоб визначитися, який із них підійде саме вам, необхідно ретельно зважити потреби та можливості компанії. Наприклад, для стартапів і веб-сервісів часто більш актуальним є конвеєр СI-CD, тоді як великі корпорації з великими, складними системами можуть віддати перевагу Continuous Deployment.
1 коментар
Додати коментар Підписатись на коментаріВідписатись від коментарів