Бітва 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, якая акумулюе водгукі аб самых розных прадуктах і адзнакі, якія ставяць ім карыстачы. Тут сярэдні рэйтынг Джэнкінс, Выведзены на аснове 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
Джэнкінс - гэта шырока вядомы, гнуткі 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 ёсць community-версія, яна падтрымлівае кіраванне рэпазітарамі, сродкі для адсочвання праблем, арганізацыю код-рэўю, механізмы, арыентаваныя на стварэнне дакументацыі. Кампаніі могуць усталёўваць 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-канвеера. Але, калі іх параўнаць, апынецца, што яны, хоць і шмат у чым падобныя, чымсьці адзін ад аднаго адрозніваюцца.

Характарыстыка
Джэнкінс
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

Дадаць каментар