buildbot проти hudson / jenkins для постійної інтеграції C ++


76

В даний час я використовую jenkins / hudson для постійної інтеграції великого, в основному, проекту C ++. У нас є окремі проекти для магістралі та кожної галузі. Крім того, є кілька пов'язаних проектів для коду Java, але налаштування для них є досить простими зараз (хоча ми можемо зробити більше пізніше). Проекти С ++ роблять наступне:

  • Будує все з варіантами, чи потрібно переналаштувати, виконати чисту збірку або скористатися новим замовленням
  • За бажанням створює та запускає всі тести
  • За бажанням запускає всі тести за допомогою мемчека Valgrind
  • Запускає cppcheck
  • Створює документацію про кисень
  • Публікує звіти: модульні тести, valgrind, cppcheck, попередження компілятора, SLOC, відкриті завдання та охоплення коду (за допомогою gcov, gcovr та плагіна cobertura)
  • Розгортає код щоночі або на вимогу до тестового середовища та сховища пакетів

Все можна налаштувати для автоматичної збірки та необов’язково для збірки на вимогу. Знизу є скрипт bash, який контролює більшу частину цього, що далі залежить від нашої системи збірки, яка використовує automake та autoconf разом із користувацькими сценаріями bash.

Ми почали використовувати Хадсон (на той час), тому що саме цим користувались хлопці Java, і ми просто хотіли нічних збірок. З тих пір ми додали набагато більше і продовжуємо додавати більше. У чомусь Хадсон чудовий, але, звичайно, не ідеальний.

Я розглядав інші рішення, і єдиним, хто схожий на заміну, є buildbot. Чи буде buildbot краще для цієї ситуації? Чи варто інвестування, оскільки ми вже використовуємо Гудзон? Чому?

РЕДАГУВАТИ : Хтось запитав, чому я не вважаю Гудзона / Дженкінса ідеальним. Коротка відповідь - все можна покращити. Мені просто цікаво, чи є Дженкінс найкращим поточним рішенням для мого випадку використання, чи є щось краще (buildbot?), Яке було б простіше підтримувати в довгостроковій перспективі, навіть коли з’являються нові вимоги.


4
Я не дивився на Buildbot, але ми робимо майже все, що ви згадали в багатьох проектах C ++ на Hudson. Які неідеальні речі ви бачите з Гудзоном / Дженкінсом?
Soo Wei Tan

Дотепер ми були дуже задоволені Дженкінсом / Хадсоном. Ми насправді не стикалися з випадками, коли ми вважали, що це було недостатньо або бракувало.
Soo Wei Tan

@SooWeiTan добре для одного, користувальницький інтерфейс ..
Пітікос,

@Pithikos Використовуючи Дженкінса постійно з мого останнього коментаря. Я починаю погоджуватися. Це стає ще гіршим, коли ви починаєте встановлювати плагіни. Ми досить закріпилися в екосистемі Дженкінса, хоча було б великим зусиллям змінити системи.
Soo Wei Tan

Голосування за закриття як занадто широке. Ще один ширше: stackoverflow.com/questions/25902 / ...
Чіро Сантіллі郝海东冠状病六四事件法轮功

Відповіді:


44

Обидва вони є проектами з відкритим кодом, але вам не потрібно міняти код buildbot, щоб "розширити" його, насправді досить легко імпортувати власні пакети в його конфігурації, в яких ви можете підкласувати більшість функцій за допомогою власних доповнень. Приклади: ваша власна компіляція або тестовий код, деякий синтаксичний аналіз результатів / помилок, які слід взяти до наступних кроків, ваше власне форматування повідомлень електронної пошти з попередженнями тощо. Є багато можливостей.

Взагалі я б сказав, що buildbot - це найбільш "загальне призначення" автоматичних інструментів збірки. Однак Дженкінс може бути найкращим чином пов'язаний із запущеними тестами, особливо для аналізу та подання результатів у приємні способи (результати, деталі, діаграми ... кілька кліків), речі, які buildbot не робить "нестандартно". Я насправді думаю використовувати обидва для отримання більш сексуальних сторінок результатів тесту .. :-)

Також, як правило, не повинно бути важко створити конфігурацію нового інструменту: якщо специфікація того, що робити (конфігурація, збірка, тестування) занадто важка для переключення з одного інструменту на інший, це (поганий) знак що недостатньо сценаріїв конфігурації переміщується до джерел. Buildbot (або Jenkins) повинен викликати лише прості команди. Якщо запустити тести просто, тоді це зроблять і розробники, що покращить рівень успіху, тоді як якщо тести запускає лише система безперервної інтеграції, ви будете працювати після неї, щоб виправити помилки нового коду, і втратите його нерегресійне значення, просто мої 0,02 € :-)

Сподіваюся, це допоможе.


Дякуємо Крістофу за внесок та хороший огляд плюсів і мінусів кожного.
deuberger

6
"Buildbot (або Jenkins) повинен викликати лише прості команди" - золоті слова
bobah

6

"Інтеграція результатів" також є у jenkins / hudson, і ви можете порівняно легко захоплювати продукти збірки, не "копіюючи їх в іншому місці".

Наприклад, звіти про покриття та показники модульних випробувань та javadoc для коду Java інтегровані. Для нашого коду на C ++ плагінів трохи не вистачає, але ви все одно можете отримати більшість із них.

ми запускали buildbot з попередньої версії 0.7, зараз працюємо на 0.8 і лише зараз бачимо реальну причину для переходу, оскільки buildbot 0.8 на довгий час забув про рабів Windows, а підтримка була досить поганою.


9
Тож ви рекомендуєте Дженкінса або buildbot для великого проекту на C ++?
deuberger

6

Існує багато інших рішень, крім Jenkins / Hudson / BuildBot:

  • TeamCity від Jetbrains
  • Бамбук від Atlassian
  • Йти по Thoughtworks
  • Круіз контроль
  • OpenMake Meister

Специфіка того, що ви робите, насправді не настільки важлива, поки агенти (вони ж вузли), на яких ви їх робите, підтримують ці завдання.

Краса сервера CI помічає, коли збірка змінюється, щоб викликати нову збірку (і тест), опублікувати артефакти та опублікувати результати тесту.

Коли ви порівнюєте такі інструменти CI, як ми згадали, враховуйте такі функції, як зручність використання його інтерфейсу, наскільки легким є розгалуження (та такі функції, як автоматичне злиття), сповіщення (наприклад, XMPP / jabber) або інформаційний випромінювач (наприклад, підключення) до монітора, щоб завжди відображати статус). Підтримка продуктів - це ще одна річ, яку слід враховувати - підтримка Дженкінса така ж хороша, як і той, хто відповідає на запитання спільноти в той час, коли у вас виникають запитання.

Мій особистий улюблений - це бамбук, але він постачається із ліцензійною платою.


2
Дякую за пропозиції. У нашому випадку ми хочемо дотримуватися рішень FOSS, що виключає всі ці варіанти, крім круїз-контролю. Якщо ви можете запропонувати причину, чому я можу перейти на круїз-контроль, це може бути корисно.
deuberger

2
Будьте готові: Дженкінс набагато краще підтримується спільнотою FOSS, ніж круїз-контроль. Повна пара, чоловіче!
macetw

1
Go фактично теж стали нещодавно відкритим джерелом.
timurb

2

Я давній користувач Jenkins, який займається оцінкою Buildbot, і хотів би запропонувати кілька пунктів для тих, хто розглядає можливість використання Buildbot для багатомодульних рішень:

*) Buildbot не має будь-якої готової концепції файлу, artifactsпов'язаної з кожною збіркою. Це не в інтерфейсі користувача і в жодному з вбудованих модулів "кроків", наскільки я бачу:

http://docs.buildbot.net/current/manual/configuration/buildsteps.html

... і я не бачу сторонніх плагінів:

https://github.com/buildbot/buildbot/wiki/PluginList#steps

Buildbot збирає всі вихідні дані консолі з даної збірки, але критично важливо, що ви не можете збирати файли, пов'язані з нею.

*) Враховуючи те, що артефакти не підтримуються, непросто створити "колекторські" проекти, які включають кілька модулів, скажімо, в один інсталятор. Jenkins має чудову функцію, яка дозволяє параметризувати збірку збірками з інших модулів (тип параметра - a run).

*) Встановлення залежностей між модулями є складнішим у Buildbot. Скажімо, у вас є бібліотека, від якої залежать три двійкові файли, і ви хочете, щоб ці двійкові файли відновлювались кожного разу, коли бібліотека змінюється. Дженкінс triggersвбудував в інтерфейс користувача. Якщо ви хочете запустити тригери в Buildbot, вам доведеться створювати їх за допомогою сценарію schedulers.Dependent, і це спричиняє велику перевантаження елементів в Schedulersінтерфейсі.

*) Коли ви працюєте в Buildbot, здається, що майже вся конфігурація виконується master.cfgв коді. Це дивовижно і розчаровує.

*) Buildbot змушує вас створювати workerдодатковий masterсервер. Це дратує початківців та системи, для яких достатньо одного сервера збірки.

Моє враження після двох днів оцінки Buildbot полягає в тому, що ми будемо дотримуватися Дженкінса, головним чином завдяки цьому artifacts. Buildbot - це інструмент, який ми використовували б лише у тому випадку, якщо б у нас були більш масштабні потреби в налаштуваннях і час, щоб це зробити.


1

Що стосується buildbot та артефактів - у мене недостатньо оцінок користувачів, щоб зробити коментар - ви можете отримати артефакти з серії buildbot 2.x досить просто за допомогою вбудованих дій із завантаження файлів / каталогів. Однак ви рідко хочете просто переміщати файли. Зазвичай ви робите запущений крок збірки, який робить розгортання безпосередньо від робочого для найкращих результатів. наприклад, натискання на хмарне сховище, контейнери, третя сторона (завантаження пари) тощо.

Таким чином ви можете отримувати метрики для завантажень та умовно краще керувати ними (або навіть змішувати та поєднувати артефакти на робочих машинах).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.