Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4. Інженерія систем і програмного забезпечення.docx
Скачиваний:
223
Добавлен:
17.07.2024
Размер:
1 Мб
Скачать

4.6.5. Постійна інтеграція/постійне впровадження (Continuous Integration/Continuous Delivery)

Неперервна інтеграція (англ. 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).

Безперервна доставка (англ. Continuous delivery (CD)) — підхід у програмній інженерії, суть якого полягає в тому, що команди розроблюють програмне забезпечення протягом коротких періодів часу, забезпечуючи надійний випуск версії у будь-який час. Його метою є створення, тестування та випуск програмного забезпечення швидше та частіше. Підхід допомагає зменшити вартість, час та ризик доставки змін, дозволяючи додаткові поповнення додатків у виробництві. Простий та повторюваний процес розгортання має важливе значення для безперервної доставки.

Порівняння з DevOps. Безперервна доставка і DevOps схожі за своїм значенням (і часто поєднуються), але вони являють собою дві різні концепції: DevOps застосовується в більш широких аспектах.

Безперервна доставка — це підхід до автоматизації доставки програмного забезпечення, який фокусується на: об'єднання різних процесів; виконання їх швидше та частіше.

Вони мають загальні кінцеві цілі і часто використовуються разом для їх досягнення. DevOps і безперервна доставка використовують гнучкі методи: невеликі і швидкі зміни з цілеспрямованим результатом для кінцевого клієнта.

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