Битва Jenkins и GitLab CI/CD

През последното десетилетие са постигнати значителни успехи в разработката на инструменти за непрекъсната интеграция (Continuous Integration, CI) и непрекъснато разгръщане (Continuous Delivery, CD). Развитието на технологиите в интеграцията на разработка и експлоатация на софтуер (Development Operations, DevOps) доведе до бърз ръст на търсенето на CI/CD инструменти. Съществуващите решения постоянно се подобряват, стремейки се да бъдат актуални, излизат нови версии, а в света на осигуряване на качеството на софтуер (Quality Assurance, QA) постоянно се появяват нови продукти. При такова разнообразие от избор, подбора на подходящия инструментариум се оказва трудна задача.

Битва Jenkins и GitLab CI/CD

Сред всички съществуващи CI/CD инструменти, две проекта определено заслужават внимание на онези, които търсят нещо в тази сфера. Става въпрос за Jenkins и инструмента GitLab CI/CD, който е част от платформата GitLab. Jenkins има над 16000 звезди в GitHub. Репозиторието на GitLab на gitlab.com е получило малко над 2000 звезди. Когато сравним популярността на репозиториите, ще се окаже, че Jenkins има 8 пъти повече звезди от платформата, част от която е GitLab CI/CD. Но при избора на CI/CD инструмент, това не е единственият показател, на който трябва да се обръща внимание. Има и множество други, и това обяснява защо в много сравнения Jenkins и GitLab CI/CD са много близо един до друг.

Да вземем например данните от платформата G2, която събира отзиви за разнообразни продукти и оценки от потребителите. Тук средният рейтинг Jenkins, изведен на база 288 отзива, е 4,3 звезди. А за GitLab тук има 270 отзива, средният рейтинг на този инструмент е 4,4 звезди. Не грешим, ако заявим, че Jenkins и GitLab CI/CD конкурират помежду си на равни условия. Интересно е да се отбележи, че проектът Jenkins е стартиран през 2011 година и оттогава е любим инструмент на тестировачите. Но същевременно проектът GitLab CI/CD, стартиран през 2014 година, зае много високи позиции благодарение на предлаганите от платформата иновации.

Ако говорим за популярността на Jenkins в сравнение с други подобни платформи, трябва да отбележим, че, публикувайки статия, в която сравнявахме платформите Travis CI и Jenkins, проведохме анкета. В нея участваха 85 потребители. На респондентите беше предложено да изберат CI/CD инструмент, който им харесва най-много. 79% избраха Jenkins, 5% избраха Travis CI, а 16% посочиха, че предпочитат други инструменти.

Битва Jenkins и GitLab CI/CD
Резултати от анкетата

Сред другите CI/CD инструменти най-често се споменаваше GitLab CI/CD.

Ако сериозно се занимавате с DevOps, трябва внимателно да подбирате съответстващите инструменти, като вземете предвид особеностите на проекта, бюджета му и други изисквания. За да ви помогнем да вземете правилното решение, планираме анализ на Jenkins и GitLab CI/CD. Надяваме се, че това ще ви помогне да направите информиран избор.

Запознаване с Jenkins

Битва Jenkins и GitLab CI/CD
Jenkins — това е широко известен, гъвкав CI/CD инструмент, предназначен за автоматизация на множество задачи, свързани със софтуерни проекти. Jenkins е написан изцяло на Java и е издаден под лиценз MIT. Той разполага с мощен набор от функции, насочени към автоматизация на задачи, свързани със сборка, тестване, разгръщане, интеграция и пускане на софтуер. Този инструмент може да се използва на различни операционни системи, включително macOS, Windows и множество дистрибуции на Linux, например — OpenSUSE, Ubuntu и Red Hat. Съществуват инсталационни пакети на Jenkins, предназначени за различни ОС, а инструментът може да бъде инсталиран в Docker и във всяка система, която има JRE (Java Runtime Environment).

Разработчиците на Jenkins създадоха и друг проект, Jenkins X, който е предназначен за работа в среда Kubernetes. В Jenkins X са интегрирани Helm, сървърът Jenkins CI/CD, Kubernetes и други инструменти, предназначени за създаване на CI/CD конвейери, отговарящи на съвременните практики на DevOps. Например, тук се използва GitOps.

Към предимствата на Jenkins може да добавим и факта, че неговите скриптове са много добре структурирани, ясни и лесни за четене. Екипът на Jenkins е създала около 1000 плъгини, които целят организацията на взаимодействието на Jenkins с най-различни технологии. В скриптовете може да се използват системи за удостоверяване, което, например, позволява свързването с различни затворени системи.

По време на работа на Jenkins конвейера можете да наблюдавате какво се случва на всеки от етапите и дали даден етап е завършен успешно или не. Може да следите всичко това, без да използвате графичен интерфейс, а използвайки възможностите на терминала.

Характеристики на Jenkins

Сред известните характеристики на Jenkins могат да се отбележат лесната настройка, високият уровень на автоматизация на различни операции и отличната документация. Когато става въпрос за решаване на DevOps задачи, Jenkins се смята за много надежден инструмент, използвайки който, обикновено няма нужда от внимателно наблюдение на целия процес на обработка на проекта. С други CI/CD инструменти това не е така. Нека обсъдим някои от най-важните възможности на Jenkins.

▍1. Безплатен, с отворен код, поддръжка на множество платформи

Jenkins може да работи на платформи macOS, Windows и Linux. Той може да функционира и в среда на Docker, което позволява организирането на хомогенно и бързо изпълнение на автоматизирани задачи. Освен това, този инструмент може да се изпълнява под формата на сервлет в контейнери, поддържащи Java, като Apache Tomcat и GlassFish. Инсталацията на Jenkins е качествено документирана.

▍2. Развита екосистема от плъгини

Екосистемата от плъгини на Jenkins изглежда много по-развита в сравнение с екосистемите на допълнителните модули на други CI/CD инструменти. В момента съществуват над 1500 плъгини за Jenkins. Тези плъгини са насочени към решаване на широк спектър от задачи и с тяхна помощ можете да автоматизирате най-разнообразни проекти. Богатството на избора на безплатни допълнителни модули означава, че на потребителя на Jenkins не му е наложително да купува скъпи платени плъгини. Има възможност интеграция Jenkins с множество DevOps инструменти.

▍3. Лесна инсталация и настройка

Инсталирането и настройването на Jenkins е доста просто. Процесът на обновление на системата също е организиран много удобно. Отново трябва да спомена качеството на документацията, тъй като в нея можете да намерите отговори на много въпроси свързани с инсталирането и настройването на Jenkins.

▍4. Приятелска общност

Както вече беше споменато, Jenkins е проект с отворен код, чиято екосистема включва множество плъгини. Около Jenkins е създадена голяма общност от потребители и разработчици, които помагат за развитието на проекта. Общността е един от факторите, които допринасят за развитието на Jenkins.

▍5. Наличие на REST API

В хода на работа с Jenkins може да се използва REST API, който разширява възможностите на системата. API за дистанционен достъп до системата е представен в три варианта: XML, JSON с поддръжка на JSONP, Python. Ето страница с документация, която разкрива подробности за работа с REST API на Jenkins.

▍6. Поддръжка на паралелно изпълнение на задачи

Jenkins поддържа разпаралеляване на DevOps задачи. Лесно може да се интегрира с подходящи инструменти и да получава известия за резултатите от изпълнението на задачите. Изпълнението на тестове на кода може да се ускори чрез организиране на паралелно сглобяване на проекта с помощта на различни виртуални машини.

▍7. Поддръжка на работа в разпределени среди

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

Запознаване с GitLab

Битва Jenkins и GitLab CI/CD
GitLab CI/CD може да се нарече един от най-новите и най-обичаните инструменти от DevOps инженерите. Този безплатен инструмент с отворен код е вграден в системата за контрол на версиите GitLab. Платформата GitLab разполага с версия за общността, която поддържа управление на хранилищата, инструменти за проследяване на проблеми, организиране на кодови ревюта и механизми, насочени към създаване на документация. Компаниите могат да инсталират GitLab локално, свързвайки тази система с Active Directory и LDAP сървъри за организиране на безопасна идентификация и удостоверяване на потребителите.

Ето видеоурок, който ще ви помогне да разберете как да създавате CI/CD конвейери, използвайки възможностите на GitLab CI/CD.

Първоначално GitLab CI/CD беше издаден като самостоятелен проект, но през 2015 година този набор от инструменти беше интегриран в GitLab 8.0. Отделен GitLab CI/CD сървър може да поддържа работа на повече от 25000 потребители. На базата на подобни сървъри могат да се създават системи с висока наличност.

GitLab CI/CD и основният проект GitLab са написани на Ruby и Go. Те са издадени под MIT лиценз. GitLab CI/CD, освен обичайните възможности на CI/CD инструментите, предлага и допълнителни функции, свързани например с планирането на задачи.

Интегрирането на GitLab CI/CD в проект е много просто. При използване на GitLab CI/CD, процесът на обработка на кода на проекта се разделя на етапи, всеки от които може да се състои от няколко задачи, изпълнявани в определен ред. Задачите са подложими на прецизно настройване.

Задачите могат да се изпълняват паралелно. След настройка на реда на етапите и задачите, CI/CD конвейерът е готов за работа. Може да се наблюдава напредъкът му, следейки състоянието на задачите. В резултат на това използването на GitLab CI/CD е много удобно, вероятно дори по-удобно от други подобни инструменти.

Характеристики на GitLab CI/CD и GitLab

GitLab CI/CD е един от най-популярните DevOps инструменти. Проектът се отличава с качествена документация, а възможностите му са лесни и удобни за ползване. Ако не сте запознати с GitLab CI/CD, следващият списък с функции на този инструмент ще ви даде обща представа за това, какво можете да очаквате от него. Трябва да се отбележи, че много от тези функции са свързани с самата платформа GitLab, в която е интегриран GitLab CI/CD.

▍1. Популярност

GitLab CI/CD е сравнително нов инструмент, който намери широко приложение. GitLab CI/CD постепенно стана изключително популярен CI/CD инструмент, използван за автоматизирано тестване и разгръщане на софтуер. Лесно се настройва и, освен това, е безплатен CI/CD инструмент, вграден в платформата GitLab.

▍2. Поддръжка на GitLab Pages и Jekyll

Jekyll е генератор на статични сайтове, който може да се използва в рамките на системата GitLab Pages за създаване на сайтове на база на GitLab репозитории. Системата взема изходните материали и генерира готов статичен сайт. Управлението на външния вид и функциите на такива сайтове може да се осъществи, редактиране на файла _config.yml, използван Jekyll.

▍3. Възможности за планиране на проекти

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

▍4. Автоматично мащабиране на CI-рейсъри

Благодарение на автоматичното мащабиране на рейсърите, отговорни за изпълнението на конкретни задачи, може значително да се спестят разходи за наемане на сървърни мощности. Това е особено важно, ако е въпрос на среди, където тестовете на проектите се извършват паралелно. Освен това, е важно за големи проекти, състоящи се от няколко репозитория.

▍5. Средства за проследяване на проблеми

Мощните възможности на GitLab за проследяване на проблеми доведоха до това, че много опенсорсни проекти използват тази платформа. GitLab CI/CD позволява извършването на паралелно тестване на различни клонове на код. Резултатите от тестовете удобно се анализират в интерфейса на системата. Това отличава GitLab CI/CD от Jenkins.

▍6. Ограничаване на достъпа до репозитории

Платформата GitLab поддържа ограничаване на достъпа до репозиториите. Например, на тези, които работят съвместно по проект в определен репозиторий, могат да се присвоят права, съответстващи на техните роли. Това е особено актуално за корпоративни проекти.

▍7. Активна поддръжка на общността

Около GitLab се е създала активна общност, която способства за развитието на тази платформа и нейния инструменти, по-специално — GitLab CI/CD. Дълбоката интеграция на GitLab CI/CD и GitLab, освен всичко друго, улеснява намирането на отговори на въпросите, които възникват при работа с GitLab CI/CD.

▍8. Поддръжка на работа с различни системи за контрол на версиите

GitLab CI/CD е система, която може да работи не само с код, разположен в репозиторите на GitLab. Например, кодът може да се съхранява в GitHub-репозиторий, а CI/CD конвейерът може да бъде организиран на базата на GitLab с използване на GitLab CI/CD.

Сравнение на Jenkins и GitLab CI/CD

Jenkins и GitLab CI/CD са много добри инструменти, всеки от които може да осигури нормалната работа на CI/CD конвейера. Но, ако ги сравним, ще се окаже, че те, въпреки че в много отношения си приличат, се различават в определени аспекти.

Характеристика
Jenkins
GitLab CI/CD

Отворен или затворен код
Отворен код
Отворен код

Инсталиране
Изисква се.
Не е необходимо, тъй като е вградена функция на платформата GitLab.

Уникални функции
Подпомагане на плъгини.
Дълбока интеграция в системата за управления на версиите.

Поддръжка
Отсъства.
Има.

Инсталиране и настройка
Не създава трудности
Не създава трудности

Самостоятелно разгръщане на системата
Това е единственият начин за използване на системата.
Поддържа се.

Създаване на CI/CD конвейери
Поддържа се, използва се Jenkins Pipeline.
Поддържа се.

Мониторинг на производителността на приложенията
Отсъства.
Има.

Екосистема
Има над 1000 плъгина.
Системата се развива в рамките на GitLab.

API
Поддържа развитата система API.
Предлага API за по-дълбока интеграция в проекти.

Подкрепа за JavaScript
Има.
Има.

Интеграция с други инструменти
Поддържа се интеграция с други инструменти и платформи (Slack, GitHub).
Множество средства за интеграция с външни системи, по-специално с GitHub и Kubernetes.

Контрол на качеството на кода
Поддържа се — с помощта на плъгина SonarQube и други плъгини.
Поддържа се.

Разлики между Jenkins и GitLab CI/CD

След като описахме и сравнихме Jenkins и GitLab CI/CD, нека се фокусираме върху разликите между тези DevOps инструменти. Познанията за тези разлики ще помогнат на тези, които предпочитат един инструмент пред друг.

  • GitLab CI/CD може напълно да контролира Git хранилищата. Става въпрос за управление на клоновете на хранилищата и някои други възможности. А Jenkins, макар и да може да работи с хранилища, не предоставя същото ниво на контрол над тях, като GitLab CI/CD.
  • Jenkins е безплатен проект с отворен код. Този, който го избира, самостоятелно го разгръща. А GitLab CI/CD е част от платформата GitLab и представлява готово решение.
  • GitLab CI/CD поддържа развити средства за управление на задачите, работещи на ниво проекти. Тази страна на Jenkins е по-слабо развита.

Jenkins и GitLab CI/CD: силни и слаби страни

Сега имате известна представа за Jenkins и GitLab CI/CD. Сега, за да се запознаете по-добре с тези инструменти, нека разгледаме техните силни и слаби страни. Надяваме се, че вече сте решили кой точно инструмент ви е необходим. Надяваме се, този раздел ще ви помогне да проверите себе си.

▍Силни страни на Jenkins

  • Голяма съвкупност от плъгини.
  • Пълен контрол над инсталирането на инструмента.
  • Лесно отстраняване на грешки в рънърите.
  • Лесна настройка на възлите.
  • Лесно разгръщане на кода.
  • Много добра система за управление на данни.
  • Гибкост и универсалност.
  • Подкрепа за различни езици за програмиране.
  • Системата е интуитивно разбираема.

▍Слаби места на Jenkins

  • При използването на плъгини могат да възникнат проблеми.
  • При използването на Jenkins в малки проекти, времето, нуждаещо се за неговата самостоятелна настройка, може да се окаже неоправдано голямо.
  • Липсата на общи аналитични данни за CI/CD веригите.

▍Силни страни на GitLab CI/CD

  • Добра интеграция с Docker.
  • Лесно мащабиране на ранърите.
  • Паралелно изпълнение на задачите, които влизат в състава на CI/CD конвейера.
  • Използване на ориентирнат ацикличен граф за настройване на отношенията между задачите.
  • Високо ниво на мащабируемост благодарение на възможността за паралелно изпълнение на ранърите.
  • Лесно добавяне на задачи.
  • Лесно разрешаване на конфликти.
  • Надеждна система за сигурност.

▍Слаби места на GitLab CI/CD

  • За всяка задача трябва да се опишат и качат/изтеглят артефакти.
  • Не може да се тества резултатите от обединяване на клони, преди те да бъдат действително обединени.
  • При описанието на етапите на CI/CD конвейера не могат да се уточняват отделни стъпки.

Итог

Както Jenkins, така и GitLab CI/CD имат силни и слаби страни. Отговорът на въпроса, което точно да изберем, зависи от нуждите и особеностите на конкретния проект. Всеки от разгледаните днес CI/CD инструменти притежава определени характеристики, макар тези инструменти да са създадени за решаване на една и съща задача. В същото време Jenkins е автономен инструмент, а GitLab CI/CD е част от платформа, предназначена за съвместна работа по кода.

Избирайки CI/CD система, освен възможностите и свързаните с нея разходи, трябва да се вземат предвид и това, с какво точно работят DevOps инженерите, поддържащи проекта.

С какви CI/CD инструменти работите?

Битва Jenkins и GitLab CI/CD

Битва Jenkins и GitLab CI/CD

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

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