Автоматизація складання — Вікіпедія

Автоматизація складання або автоматизація побудови (англ. 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). Ці файли сумісні з такими інструментами як:

Вимоги до систем складання[ред. | ред. код]

Базові вимоги:

  • Часті або нічні складання для своєчасного виявлення проблем[7][8][9]
  • Підтримка керування залежностями сирцевого коду (Source Code Dependency Management)
  • Обробка різницевого складання
  • Повідомлення при збігові сирцевого коду (після складання) з наявними бінарними файлами
  • Прискорення складання
  • Звіт про результати компіляції і компонування.

Додаткові вимоги:[10]

  • Створення опису змін (release notes) та іншої супутньої документації (наприклад, довідників)
  • Звіт про статус складання
  • Звіт про успішне/неуспішне проходження тестів
  • Підсумовування доданих/змінених/вилучених особливостей у кожному новому складанні.

Програмні інструменти[ред. | ред. код]

Виноски[ред. | ред. код]

  1. GNU Make — GNU Project (англ.). Free Software Foundation. Архів оригіналу за 23 квітня 2015. Процитовано 22 квітня 2015.
  2. Dr. Dobb's Distributed Loadbuilds, процитовано 13 квітня 2009
  3. Dr. Dobb's Take My Build, Please
  4. LSF User's Guide - Using lsmake, архів оригіналу за 7 жовтня 2007, процитовано 13 квітня 2009
  5. Distributed Visual Studio Builds, архів оригіналу за 12 квітня 2009, процитовано 8 квітня 2009
  6. www.denverjug.org (PDF). Архів оригіналу (PDF) за 23 листопада 2008. Процитовано 22 квітня 2015.
  7. Build and Release Management. Архів оригіналу за 30 вересня 2007. Процитовано 22 квітня 2015. {{cite web}}: Текст «freshmeat.net» проігноровано (довідка)
  8. IBM developerWorks : Site maintenance. Архів оригіналу за 2 березня 2009. Процитовано 22 квітня 2015.
  9. Buildbot. Архів оригіналу за 6 грудня 2010. Процитовано 22 квітня 2015.
  10. Mayank Gupta (15.09.2008). Continuous Integration and Enterprise Build Automation (англ.). Архів оригіналу за 29 квітня 2009. Процитовано 22 квітня 2015.

Посилання[ред. | ред. код]

  • Майк Кларк: Pragmatic Project Automation, The Pragmatic Programmers ISBN 0-9745140-3-9

Дивись також[ред. | ред. код]