Неперервна інтеграція
Неперервна інтеграція (англ. Continuous Integration) — практика розробки програмного забезпечення, яка полягає у виконанні частих автоматизованих складань проєкту для якнайшвидшого виявлення та вирішення інтеграційних проблем. У звичайному проєкті, де над різними частинами системи розробники працюють незалежно, стадія інтеграції є завершальною. Вона може непередбачувано затримати закінчення робіт. Перехід до неперервної (постійної) інтеграції дозволяє знизити трудомісткість інтеграції і зробити її передбачуванішою за рахунок найбільш раннього виявлення та усунення помилок і суперечностей.
Цикл розробки програмного забезпечення |
---|
Програміст за роботою |
Діяльність і кроки |
Допоміжні дисципліни |
Практики |
Інструменти |
|
Стандарти та галузі знань |
Вимоги до проєкту
- Початковий код і все, що необхідно для побудови та тестування проєкту, зберігається в репозиторії системи керування версіями;
- Операції копіювання з репозиторію, складання та тестування всього проєкту автоматизовані і легко викликаються із зовнішньої програми.
Організація
На виділеному сервері організовується служба, до завдань якої входять:
- Отримання початкового коду з репозиторію;
- Складання проєкту;
- Виконання тестів;
- Розгортання готового проєкту;
- Відправлення звітів.
Локальне складання може здійснюватися:
- За зовнішнім запитом,
- За розкладом,
- За фактом оновлення репозиторію і за іншими критеріями.
Побудова за розкладом
У разі складання за розкладом, вони, як правило, проводяться кожної ночі в автоматичному режимі - нічні складання (щоб до початку робочого дня були готові результати тестування). Для розрізнення додатково вводиться система нумерації складань — зазвичай, кожне складання нумерується натуральним числом, яке збільшується з кожним новим складанням. Початковий код та інші вихідні дані при взятті їх з репозиторію системи контролю версій позначаються номером складання. Завдяки цьому, точно таке ж складання може бути точно відтворене в майбутньому — досить взяти вихідні дані по потрібній мітці і знову запустити процес. Це дає можливість повторно випускати навіть дуже старі версії програми з невеликими виправленнями.
Переваги
- Проблеми інтеграції виявляються і виправляються швидше, що виявляється дешевше
- Негайний прогін модульних тестів для свіжих змін
- Постійна наявність поточної стабільної версії разом з продуктами складань — для тестування, демонстрації, тощо
- Негайний ефект від неповного або непрацюючого коду привчає розробників до роботи в ітеративному режимі з коротшим циклом.
Недоліки
- Витрати на підтримку роботи безперервної інтеграції
- Потенційна необхідність у виділеному сервері під потреби безперервної інтеграції
- Негайний ефект від неповного або непрацюючого коду відучує розробників від виконання періодичних резервних включень коду в репозиторій
- У разі використання системи управління версіями початкового коду з підтримкою розгалуження, ця проблема може вирішуватися створенням окремої «гілки» проєкту (англ. branch) для внесення великих змін (код, розробка якого до працездатного варіанту займе кілька днів, але бажано частіше резервне копіювання в репозиторій). Після закінчення розробки та індивідуального тестування такої гілки, вона може бути об'єднана (англ. merge) з основним кодом або «стовбуром» (англ. trunk) проєкту.
Перелік засобів
- Bamboo (IT)
- Buddy (Buddy.Works)
- BuildBot (IT)
- Buildkite
- CircleCI
- Codefresh (IT)
- Codeship (IT)
- Concourse CI
- CruiseControl (IT)
- Drone.io CD
- Go CD (Snap CI tranforms to Go CD)
- Hydra
- Jenkins (стара назва: Hudson)
- Nevercode
- ProductionMap (N/A)
- Predix CI (стара назва: Solano CI)
- TeamCity (IT)
- Travis CI
- Scrutinizer (IT)
- Semaphore (IT) (стара назва: Semaphoreapp)
- Apache Gump
- AWS CodeBuild
- Azure DevOps (стара назва: Visual Studio Team Services)
Для мобільних розробок (Android, iOS):
- CIsimple
- Hosted-CI
+ Appthwack (appthwack.com) / + bitbar (old testdroid)
Примітки
Див. також
Посилання
- (англ.)Martin Fowler. Continuous Integration
- (рос.)Непрерывная интеграция
- (англ.)A Continuous Integration System. Malini Das