Справочник: как функционира процесът на Continuous Integration

Днес ще се обърнем към историята на термина, ще обсъдим сложността на внедряването на CI и ще предоставим няколко популярни инструмента, които ще помогнат за работата с него.

Справочник: как функционира процесът на Continuous Integration
/ Flickr / Алтуг Каракок / CC BY / Фото изменено

Термин

Непрекъсната интеграция (Continuous Integration) е подход към разработването на приложения, който предполага често провеждане на сборки на проекта и тестване на кода.

Целта е да се направи процесът на интеграция предсказуем и да се открият потенциални бъгове и грешки в ранна фаза, за да има повече време за тяхното коригиране.

Терминът Непрекъсната интеграция за първи път се появява през 1991 година. Той е въведен от създателя на езика UML Гради Буч (Grady Booch). Инженерът представя концепцията за CI като част от собствената си практика на разработка — метода на Буч. Той предполага инкрементално уточняване на архитектурата при проектирането на обектно-ориентирани системи. Гради не е описал конкретни изисквания за непрекъсната интеграция. Но по-късно в книгата си „Обектно-ориентиран анализ и дизайн с приложения“ той казва, че задачата на методиката е да ускори пускането на „вътрешни релизи“.

История

През 1996 година CI е приет от създателите на методологията екстремно програмиране (XP) — Кент Бек (Kent Beck) и Рон Джеффрис (Ron Jeffries). Непрекъснатата интеграция става един от дванадесетте ключови принципа на техния подход. Основателите на XP уточняват изискванията към методологията CI и отбелязват необходимостта от провеждане на сборка на проекта няколко пъти на ден.

В началото на 2000-те години методологията непрекъсната интеграция започва да бъде популяризирана от един от основателите на Agile Alliance Мартин Фаулер (Martin Fowler). Неговите експерименти с CI довеждат до появата на първия софтуерен инструмент в тази сфера — CruiseControl. Утилитата е създадена от колегата на Мартин — Мэтю Фомел (Matthew Foemmel).

Цикълът на изграждане в инструмента е реализиран под формата на демон, който периодично проверява системата за управление на версиите за промени в кода. Решението може да бъде свалено и днес — то разпространява е под BSD-подобна лицензия.

С появата на софтуера за CI практиката започва да бъде възприемана от все повече компании. Според проучване на Forrester [стр.5 отчета] през 2009 година 86% от петдесетте запитани технологични компании използвали или внедрявали методи CI.

Днес практиката на непрекъсната интеграция се прилага от организации в най-различни индустрии. През 2018 г. голям облачен провайдер проведе анкета сред ИТ специалисти от компании в сферата на услугите, образованието и финансите. От шест хиляди респонденти 58% отговориха, че използват инструменти и принципи на CI в работата си.

Как работи това

Основата на непрекъснатата интеграция се състои от два инструмента — система за контрол на версиите и CI сървър. Последният може да бъде както физическо устройство, така и виртуална машина в облачна среда. Разработчиците качват нов код един или няколко пъти на ден. CI сървърът автоматично копира кодa с всички зависимости и извършва сборка. След това стартира интеграционни и юнит тестове. Ако тестовете преминат успешно, CI системата разгръща кода.

Общата схема на процеса може да бъде представена по следния начин:

Справочник: как функционира процесът на Continuous Integration

Методологията на CI поставя редица изисквания към разработчиците:

  • Незабавно да се поправят проблемите. Този принцип дойде в CI от екстремното програмиране. Поправянето на бъгове е най-приоритетната задача на разработчиците.
  • Да се автоматизират процесите. Разработчиците и мениджърите трябва постоянно да търсят "тесни места" в процеса на интеграция и да ги отстраняват. Например, често "бутиличното гърло" на интеграцията оказва тестуването.
  • Да се провеждат сборки колкото се може по-често. Един път на ден, за да се синхронизира работата на екипа.

Трудности при внедряването

Проблемът е в високите оперативни разходи. Дори ако компанията използва отворени CI инструменти (за които ще говорим след малко), тя все пак ще трябва да похарчи пари за поддръжка на инфраструктурата. Въпреки това, облачните технологии могат да бъдат решението.

Те опростяват сборката на разнообразни компютърни конфигурации. Плюс компаниите плащат само за използваните ресурси, което помага за спестяване на разходи за инфраструктура.

Според проучвания [стр.14 на статията], непрекъснатата интеграция увеличава натоварването на служителите на компанията (поне в началото). Те трябва да овладеят нови инструменти, а колегите не винаги помагат с обучението. Затова трябва да се справят с новите фреймворкове и услуги "на хода".

Третата трудност е свързана с автоматизацията. С нея се сблъскват организации с голям обем от наследен код, който не е покрит с автоматизирани тестове. Това води до ситуации, в които кодът просто се преписва преди пълното внедряване на CI.

Справочник: как функционира процесът на Continuous Integration
/ Flickr / theilr / CC BY-SA

Кой използва

Едни от първите, които оцениха предимствата на методологията, бяха ИТ гигантите. Google използва внедри непрекъсната интеграция от средата на 2000-те. CI беше приложен за решаване на проблема с забавянията в работата на търсачката. Непрекъсната интеграция помогна за бързото откриване и отстраняване на проблеми. Сега CI се използва от всички подразделения на ИТ гиганта.

Непрекъсната интеграция помага и на малките компании, а също така инструментите за CI се използват и от финансови и медицински организации. Например, в Morningstar услугите за непрекъсната интеграция помогнаха за закърпване на уязвимости с 70% по-бързо. А медицинската платформа Philips Healthcare успя да ускори тестовете на обновленията два пъти.

Инструменти

Ето някои популярни инструменти за CI:

  • Jenkins — една от най-популярните CI системи. Тя поддържа над хиляда плъгини за интеграция с различни VCS, облачни платформи и други услуги. Jenkins също се използва и от нас в 1cloud: инструмент влиза в нашата DevOps система. Той редовно проверява Git клон, предназначен за тестове.
  • Buildbot — python фреймворк за писане на собствени процеси за непрекъсната интеграция. Първоначалната настройка на инструмента е доста сложна, обаче това се компенсира с широките възможности за персонализация. Сред предимствата на фреймворка потребителите подчертават ниската му ресурсна натовареност.
  • Concourse CI — сървър от Pivotal, който използва Docker контейнери. Concourse CI се интегрира с всякакви инструменти и системи за контрол на версиите. Разработчиците отбелязват, че системата е подходяща за работа в компании от всякакъв размер.
  • GitLab CI — инструмент, вграден в системата за контрол на версиите GitLab. Услугата работи в облака и използва YAML файлове за конфигуриране. Както и Concourse, Gitlab CI прилага Docker контейнери, които помагат да се изолират различни процеси един от друг.
  • Codeship — облачен CI сървър, който работи с GitHub, GitLab и BitBucket. Платформата не изисква дълга първоначална настройка — в Codeship са налични стандартно настроени CI процеси. За малки (до 100 сборки на месец) и open source проекти Codeship е достъпен безплатно.

Материали от нашия корпоративен блог:

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster