Автоматизація складання
Автоматизація складання або автоматизація побудови (англ. build automation) — етап написання скриптів або автоматизація широкого спектра завдань, вживаного розробниками в їхній повсякденній діяльності. Включає в себе такі дії, як:
- компіляція сирцевого коду в бінарний код
- складання бінарного коду
- виконання тестів
- розгортання програми на виробничій платформі
- написання супровідної документації або опис змін нової версії.
Історія
Історично так склалося, що розробники застосовували автоматизацію складання для виклику компіляторів і компонувальників зі скрипту складання, на відміну від виклику компілятора з командного рядка. Досить просто за допомогою командного рядка передати один сирцевий модуль компілятору, а потім і компонувальнику для створення кінцевого об'єкта. Однак, при спробі скомпілювати або скомпонувати велику кількість модулів з сирцевим кодом, причому в певному порядку, здійснення цього процесу вручну за допомогою командного рядка виглядає занадто незручним. Набагато привабливішою альтернативою є скриптова мова, підтримувана утилітою Make. Цей інструмент дозволяє писати скрипти складання, визначаючи порядок їхнього виклику, етапи компіляції і компонування для складання програми. GNU Make[1] також надає такі додаткові можливості, як наприклад, «залежності» («makedepend»), які дозволяють вказати умови підключення сирцевого коду на кожному етапі складання. Це і стало початком автоматизації складання. Основною метою була автоматизація викликів компіляторів і компонувальника. У міру зростання і ускладнення процесу складання розробники почали додавати дії до і після викликів компіляторів, як наприклад, перевірку (check-out) версій копійованих об'єктів на тестову систему. Термін «автоматизація складання» вже включає в себе управління і дії до і після компіляції і компонування, так само як і дії при компіляції і компонуванні.
Нове покоління інструментів
В останні роки[коли?] рішення з управління складанням зробили ще більш зручним і керованим процес автоматизованого складання. Для виконання автоматизованого складання і контролю цього процесу існують як комерційні, так і відкриті рішення. Деякі рішення націлені на автоматизацію кроків до і після виклику складальних скриптів, а інші виходять за рамки дій до і після обробки скриптів і повністю автоматизують процес компіляції і компонування, позбавляючи від ручного написання скриптів. Такі інструменти надзвичайно корисні для неперервної інтеграції, коли потрібні часті виклики компіляції та обробка проміжних складань.
Просунута автоматизація складання
Просунута автоматизація складання надає можливість віддаленому користувачеві управляти обробкою розподілених складань і/або розподіленою обробкою складання. Термін «розподілені складання» значить, що виклики компілятора і компонувальника можуть передаватися множині комп'ютерів для прискорення швидкості складання. Цей термін часто плутають з «розподіленою обробкою». Розподілена обробка означає, що кожен етап процесу може бути адресований різним машинам для виконання ними даного кроку. Наприклад, етап після складання може зажадати виконання безлічі тестових скриптів на множині машин. Розподілена обробка дозволяє послати команду на виконання різних тестових скриптів на різних машинах. Розподілена обробка — не те ж саме, що і розподілене складання! Розподілена обробка не може взяти скрипти від make або maven, розбити їх і послати команди на компіляцію і компонування різним машинам. Розподілений процес складання повинен володіти певною логікою, щоб правильно визначити залежності у сирцевому коді для того щоб виконати етапи компіляції і компонування на різних машинах. Рішення автоматизації складання має бути здатне управляти цими залежностями, щоб виконувати розподілені складання. Деякі інструменти складання можуть розпізнавати подібні взаємозв'язку автоматично (Rational ClearMake distributed[2], Electric Cloud ElectricAccelerator[3]), а інші залежать від вказівок користувача (Platform LSF lsmake[4]) Автоматизація складання, здатна розсортовувати взаємозв'язки залежностей сирцевого коду, також може бути налаштована на виконання дій компіляції і компонування в режимі паралельного виконання. Це означає, що компілятори і компонувальник можуть бути викликані в багатонитевому режимі на машині, сконфігурованій з урахуванням наявності більше одного процесорного ядра.
Не всі інструменти автоматизації складання можуть виконувати розподілені складання. Більшість з них лише реалізує підтримку розподіленої обробки. Крім того, більшість рішень, що підтримують розподілені складання, можуть лише обробляти код на мовах C та C++. Рішення автоматизації складання, що підтримують розподілену обробку, часто засновані на Make і не підтримують Maven або Ant.
Як приклад рішення розподіленого складання можна навести Xoreax's IncrediBuild[5] для платформи Microsoft Visual Studio. Це може вимагати специфічного налаштування програмного оточення, щоб успішно функціонувати на розподіленій платформі (потрібно вказати розташування бібліотек, змінні оточення тощо).
Переваги
- Поліпшення якості продукту
- Прискорення процесу компіляції і компонування
- Позбавлення від зайвих дій
- Мінімізація «поганих (некоректних) складань»
- Позбавлення від прив'язки до конкретної людини
- Ведення історії складання і релізів для розбору випусків
- Економія часу і грошей завдяки причинам, вказаним вище.[6]
Типи
- Автоматизація за запитом (On-Demand automation): запуск користувачем скрипту в командному рядку
- Запланована автоматизація (Scheduled automation): безперервна інтеграція, яка відбувається у вигляді нічних складань
- Умовна автоматизація (Triggered automation): безперервна інтеграція, що виконує складання при кожному підтвердженні зміни коду (commit) у системі керування версіями
Makefile
Одна з особливих форм автоматизації складання — автоматичне створення make-файлів (makefiles). Ці файли сумісні з такими інструментами як:
- GNU Automake
- CMake
- imake
- qmake
- nmake
- wmake
- Apache Ant
- Apache Maven
- OpenMake Meister
- Gradle
Вимоги до систем складання
Базові вимоги:
- Часті або нічні складання для своєчасного виявлення проблем[7][8][9]
- Підтримка керування залежностями сирцевого коду (Source Code Dependency Management)
- Обробка різницевого складання
- Повідомлення при збігові сирцевого коду (після складання) з наявними бінарними файлами
- Прискорення складання
- Звіт про результати компіляції і компонування.
Додаткові вимоги:[10]
- Створення опису змін (release notes) та іншої супутньої документації (наприклад, довідників)
- Звіт про статус складання
- Звіт про успішне/неуспішне проходження тестів
- Підсумовування доданих/змінених/вилучених особливостей у кожному новому складанні.
Програмні інструменти
Виноски
- GNU Make — GNU Project (англ.). Free Software Foundation.
- Dr. Dobb's Distributed Loadbuilds. Процитовано 13 квітня 2009.
- Dr. Dobb's Take My Build, Please.
- LSF User's Guide - Using lsmake. Процитовано 13 квітня 2009.
- Distributed Visual Studio Builds. Архів оригіналу за 12 квітня 2009. Процитовано 8 квітня 2009.
- www.denverjug.org. Архів оригіналу за 23 листопада 2008. Процитовано 22 квітня 2015.
- Build and Release Management. Архів оригіналу за 30 вересня 2007. Процитовано 22 квітня 2015. Текст « freshmeat.net » проігноровано (довідка)
- IBM developerWorks : Site maintenance
- Buildbot
- Mayank Gupta (15.09.2008). Continuous Integration and Enterprise Build Automation (англ.).
Посилання
- Майк Кларк: Pragmatic Project Automation, The Pragmatic Programmers ISBN 0-9745140-3-9
Дивись також
- Безперервна інтеграція
- Розробка випусків
- Розробка сімейства продуктів
- Скриптова мова
- Модульне тестування
- BuildBot