Неперервна інтеграція Зміст Вимоги до проекту |...
Безперервна інтеграціяЕкстремальне програмування
англ.розробки програмного забезпеченнявиділеному серверінатуральним числомПочатковий код
Неперервна інтеграція (англ. Continuous Integration) — практика розробки програмного забезпечення, яка полягає у виконанні частих автоматизованих складань проекту для якнайшвидшого виявлення та вирішення інтеграційних проблем. У звичайному проекті, де над різними частинами системи розробники працюють незалежно, стадія інтеграції є завершальною. Вона може непередбачувано затримати закінчення робіт. Перехід до неперервної (постійної) інтеграції дозволяє знизити трудомісткість інтеграції і зробити її передбачуванішою за рахунок найбільш раннього виявлення та усунення помилок і суперечностей.
Зміст
1 Вимоги до проекту
2 Організація
2.1 Побудова за розкладом
3 Переваги
4 Недоліки
5 Перелік засобів
6 Примітки
7 Див. також
8 Посилання
Вимоги до проекту |
Початковий код і все, що необхідно для побудови та тестування проекту, зберігається в репозиторії системи керування версіями;- Операції копіювання з репозиторію, складання та тестування всього проекту автоматизовані і легко викликаються із зовнішньої програми.
Організація |
На виділеному сервері організовується служба, до завдань якої входять:
- Отримання початкового коду з репозиторію;
- Складання проекту;
- Виконання тестів;
- Розгортання готового проекту;
- Відправлення звітів.
Локальне складання може здійснюватися:
- За зовнішнім запитом,
- За розкладом,
- За фактом оновлення репозиторію і за іншими критеріями.
Побудова за розкладом |
У разі складання за розкладом, вони, як правило, проводяться кожної ночі в автоматичному режимі - нічні складання (щоб до початку робочого дня були готові результати тестування). Для розрізнення додатково вводиться система нумерації складань — зазвичай, кожне складання нумерується натуральним числом, яке збільшується з кожним новим складанням. Початковий код та інші вихідні дані при взятті їх з репозиторію системи контролю версій позначаються номером складання. Завдяки цьому, точно таке ж складання може бути точно відтворене в майбутньому — досить взяти вихідні дані по потрібній мітці і знову запустити процес. Це дає можливість повторно випускати навіть дуже старі версії програми з невеликими виправленнями.
Переваги |
- Проблеми інтеграції виявляються і виправляються швидше, що виявляється дешевше
- Негайний прогін модульних тестів для свіжих змін
- Постійна наявність поточної стабільної версії разом з продуктами складань — для тестування, демонстрації, тощо
- Негайний ефект від неповного або непрацюючого коду привчає розробників до роботи в ітеративному режимі з коротшим циклом.
Недоліки |
- Витрати на підтримку роботи безперервної інтеграції
- Потенційна необхідність у виділеному сервері під потреби безперервної інтеграції
- Негайний ефект від неповного або непрацюючого коду відучує розробників від виконання періодичних резервних включень коду в репозиторій
- У разі використання системи управління версіями початкового коду з підтримкою розгалуження, ця проблема може вирішуватися створенням окремої «гілки» проекту (англ. 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)
[1][2]
Для мобільних розробок (Android, iOS):
- CIsimple
- Hosted-CI
+ Appthwack (appthwack.com) / + bitbar (old testdroid)
Примітки |
↑ The Ultimate List of CI Tools
↑ (рос.)Непрерывная интеграция для PHP, используя TeamCity, Travis CI и Scrutinizer, 2015
Див. також |
- Екстремальне програмування
- DevOps
Посилання |
(англ.)Martin Fowler. Continuous Integration
(рос.)Непрерывная интеграция
(англ.)A Continuous Integration System. Malini Das
|