Що таке 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 — це сервер безперервної інтеграції з багатьма потужними функціями. Він підтримує роботу та стабільність сервера безперервної інтеграції, навіть коли не виконуються жодні збірки, та забезпечує кращу якість коду для будь-якого проекту.

