Що таке CI/CD? Безперервна інтеграція та безперервна доставка

⚡ Розумний підсумок

Безперервна інтеграція — це практика розробки програмного забезпечення, коли члени команди об'єднують свою роботу у спільний репозиторій щонайменше щодня, а кожен коміт запускає автоматичну збірку та тестування для раннього виявлення помилок інтеграції.

  • 🔄 Визначення: Розробники щодня інтегрують код, і кожен коміт перевіряється автоматичною збіркою.
  • 🚚 КІ проти КД: Неперервна доставка (CI) тестує кожну зміну; безперервна доставка (Continuous Delivery) забезпечує можливість випуску програмного забезпечення в будь-який час.
  • 🧪 Трубопровід: Коміти запускають етапи збірки, тестування та розгортання в одному безперервному потоці.
  • 🧰 Інструменти: Jenkins, Bamboo та TeamCity автоматизувати складання та тестування.
  • 📉 Перевага: Раннє, часте тестування означає менше помилок та швидші, безпечніші релізи.
  • 🤖 Допомога AI: Інструменти штучного інтелекту виявляють ненадійні тести та автоматично сортують помилки збірки.

Що таке CI/CD

Що таке безперервна інтеграція (CI)?

Безперервна інтеграція – це метод розробки програмного забезпечення, за якого члени команди інтегрують свою роботу принаймні раз на день. Кожна інтеграція перевіряється автоматизованою збіркою, яка виявляє помилки. Концепцію було запроваджено понад два десятиліття тому, щоб уникнути «інтеграційного пекла», яке трапляється, коли інтеграцію відкладають до кінця проекту.

Після фіксації коду програмне забезпечення збирається та тестується негайно. У великому проекті з багатьма розробниками фіксації відбуваються багато разів на день. З кожною фіксацією код збирається та тестується; якщо тест проходить, збірка перевіряється на розгортання; і якщо розгортання успішне, код передається у продакшн. Цей цикл фіксації, збірки, тестування та розгортання є безперервним, що й дало назву цій практиці.

Що таке безперервна доставка (CD)?

Безперервна доставка — це метод розробки програмного забезпечення, за якого команда розробляє програмне забезпечення короткими циклами та забезпечує його надійний випуск у будь-який час. Мета полягає в тому, щоб створювати, тестувати та випускати програмне забезпечення з хорошою швидкістю та частотою, зменшуючи витрати, час та ризики, пов'язані з впровадженням змін шляхом частих оновлень у виробничому середовищі.

Різниця між CI та CD

Безперервна інтеграція – це підхід автоматичного тестування кожної зміни в кодовій базі, тоді як безперервна доставка (Continuous Delivery) – це підхід до безпечного та швидкого впровадження таких змін, як нові функції, конфігурація та виправлення помилок, у продакшн.

Розробка без неперервної взаємодії проти розробки з неперервною взаємодією

Розробка без КІ Розробка з CI
Багато помилок Менше помилок
Нечасті коміти Регулярні коміти
Рідкісні та повільні випуски Регулярні робочі випуски
Складна інтеграція Проста та ефективна інтеграція
Тестування відбувається із запізненням Тестування проводиться рано та часто
Проблеми важче виправити Проблеми виявляються та усуваються швидше
Погана видимість проекту Краща видимість проекту

Різниця між компіляцією та безперервною інтеграцією

Хоча компіляція лише перетворює код на машинну мову, неперервна інтеграція виконує кілька ширших дій:

  • Інтеграція з базою даних: Синхронізує базу даних і код, а також автоматизує створення бази даних і тестових даних.
  • Code перевірка: Забезпечує здорову кодову базу, виявляє проблеми на ранній стадії та застосовує найкращі практики.
  • Автоматизоване розгортання: Дозволяє випускати продукт у будь-який час і постійно підтримувати його в демонстраційному стані.
  • Генерація документів: Підтримує актуальність документації та створює звіти та показники збірки.
  • Збірка: Перетворює високорівневий код на машинну мову та забезпечує його компіляцію на кожній цільовій платформі.

В ідеалі збірка виконується з командного рядка, а не залежить від IDE, відбувається безперервно на виділеному сервері CI (не як завдання cron), запускається під час кожної реєстрації та забезпечує негайний зворотний зв'язок без зусиль розробника.

Що вам потрібно для проведення процесу CI?

  • Система контролю версій (VCS): Надійний метод централізації та збереження змін, внесених до вашого проєкту з часом.
  • Віртуальна машина: Запасний сервер або хоча б один віртуальна машина щоб створити вашу систему.
  • Рішення для розміщених інструментів CI: Щоб уникнути керування серверами, розміщені рішення підтримують весь процес та пропонують легшу масштабованість.
  • Інструменти: Якщо ви обрали варіант із власним хостингом, встановіть інструмент нерозгорнутої інтеграції, такий як Jenkins, TeamCity, Bambooабо GitLab.

Як працює безперервна інтеграція?

Старим прикладом є Nokia, яка колись використовувала процедуру під назвою «нічна збірка». Після кількох комітів від багатьох розробників протягом дня програмне забезпечення збиралося щоночі. Оскільки воно збиралося лише раз на день, ізоляція, виявлення та виправлення помилок у великій кодовій базі було болісним завданням.

Later Команда запровадила метод безперервної інтеграції. Програмне забезпечення було створено та протестовано, щойно розробник затверджував код, тому будь-яка помилка виявлялася негайно, і відповідальний розробник міг швидко виправити дефект.

Особливості КІ

  • Дозволяє підтримувати єдине репозиторій вихідного коду.
  • Дозволяє протестувати клон робочого середовища, що зберігається ближче до робочого.
  • Забезпечує постійну доступність поточної збірки.
  • Робить весь процес збірки, тестування та розгортання видимим для всіх зацікавлених сторін.

Навіщо використовувати ДІ?

  • Допомагає вам створювати якісніше програмне забезпечення та проводити повторюване тестування.
  • Масштабує обсяг постачання, який виконують інженерні команди, та дозволяє розробникам працювати над функціями паралельно.
  • Підвищує видимість та комунікацію в команді.
  • Забезпечує негайний зворотний зв'язок у разі виникнення проблеми та знижує ризики, роблячи розгортання швидшим та більш передбачуваним.
  • Уникає плутанини в останню хвилину під час релізу.

Найкращі практики використання систем CI

  • Робіть коміти якомога раніше та частіше, і ніколи не виконуйте пошкоджений код.
  • Негайно виправляйте помилки збірки та дійте відповідно до показників.
  • Збірка в кожному цільовому середовищі та створення артефактів з кожної збірки.
  • Автоматизуйте збірку, щоб вона не залежала від IDE.
  • Збирайте та тестуйте все, що змінюється, включаючи схему бази даних.
  • Зберігайте швидкість збірки та використовуйте автоматизоване розгортання.

Недоліки КІ

  • Для звикання до сервера неперервної інтеграції потрібен час на початкове налаштування та навчання.
  • Необхідно розробити відповідні процедури тестування, а добре побудований набір тестів потребує значних ресурсів.
  • Звичні процеси необхідно конвертувати, а також потрібні додаткові сервери та середовища.
  • Час очікування може виникати, коли кілька розробників хочуть інтегрувати свій код одночасно.

Інструменти для процесу CI

Jenkins

Jenkins це інструмент безперервної інтеграції з відкритим кодом, написаний на JavaЦе спрощує тестування в режимі реального часу та звітування про окремі зміни у більшій кодовій базі, а також допомагає розробникам швидко знаходити та вирішувати дефекти, автоматизуючи тестування збірки.

Bamboo

Bamboo — це сервер безперервної інтеграції, який виконує автоматизовану збірку, тестування та випуск в одному місці. Він безперебійно працює з Jira та Bitbucket та підтримує багато технологій, таких як Docker, Git, SVN, Mercurial та AWS.

TeamCity

TeamCity — це сервер безперервної інтеграції з багатьма потужними функціями. Він підтримує роботу та стабільність сервера безперервної інтеграції, навіть коли не виконуються жодні збірки, та забезпечує кращу якість коду для будь-якого проекту.

Поширені запитання

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

Типовий конвеєр має етапи створення, збірки, тестування, випуску та розгортання. Code передані системі контролю версій компілюється, автоматично тестується, потім готується та випускається у виробництво.

Інтеграційне пекло — це болісне об'єднання багатьох змін розробників, збережених до кінця проєкту. Незалежна інтеграція уникає цього, постійно інтегруючи та тестуючи невеликі зміни.

Робіть коміти якомога раніше та частіше, принаймні раз на день, невеликими робочими кроками. Часті коміти дозволяють легко тестувати зміни, легко об'єднувати їх та легко відкатувати за потреби.

Артефакт збірки — це упакований вивід збірки, такий як JAR-файл, образ контейнера або бінарний файл. Той самий артефакт просувається через тестування та виробництво для забезпечення узгодженості.

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

Штучний інтелект передбачає, які тести слід запускати для змін, визначає пріоритети ризикованих областей та автоматизує сортування збоїв. Це скорочує час зворотного зв'язку та підтримує швидкість конвеєрів у міру зростання кодової бази.

Так. Моделі машинного навчання виявляють тести, які проходять та не проходять послідовно, збої збірки, пов'язані з кластером, та виявляють ймовірну першопричину, helping команди підтримують надійність трубопроводу.

Підсумуйте цей пост за допомогою: