У який момент цікавий сервер безперервної інтеграції?


9

Я читав трохи про сервери CI, як Дженкінс, і мені цікаво: в який момент це корисно?

Оскільки, безумовно, для крихітного проекту, де у вас було б лише 5 класів та 10 одиничних тестів, реальної потреби немає.

Тут у нас близько 1500 одиничних тестів, і вони проходять (на старих робочих станціях Core 2 Duo) приблизно за 90 секунд (тому що вони справді тестують "одиниці" і, отже, дуже швидкі). У нас є правило, що ми не можемо ввести код, коли тест не вдався.

Тому кожен розробник запускає всі його тести, щоб запобігти регресу.

Очевидно, оскільки всі розробники завжди запускають весь тест, ми виявляємо помилки через суперечливі зміни, як тільки один розробник витягує зміну іншого (коли є).

Мені все ще не дуже зрозуміло: чи слід створити сервер CI, як Дженкінс? Що б це принесло?

Це просто корисно для збільшення швидкості? (не проблема в нашому випадку)

Це корисно, оскільки старі конструкції можна відтворити? (але ми можемо це зробити з Mercurial, перевіривши старі обороти)

В основному я розумію, що це може бути корисним, але я не розумію, чому саме.

Будь-яке пояснення з урахуванням вищезазначених питань було б дуже вітається.

Відповіді:


9

Це просто корисно для збільшення швидкості? (не проблема в нашому випадку)

Будь-який час, витрачений на кругообіг вашого процесу, - це час, який ви могли витратити, потрапляючи в рух.

Ви також заощадите час на етапах, оскільки в ідеалі ви будуєте повністю упаковані та готові до доставки біти, які можна записати прямо на компакт-диск, завантажити в Інтернет тощо.

Це корисно, оскільки старі конструкції можна відтворити? (але ми можемо це зробити з Mercurial, перевіривши старі обороти)

Ні, ви не відтворюєте складання. Ви використовуєте створену ним збірку і тримаєте її до тих пір, поки ваші параметри збереження не викинуть її.

Ви будуєте його на сервері збірки, на відміну від ящика Dev's.

Тут у нас близько 1500 одиниць тестів, і вони проходять (на старих робочих станціях Core 2 Duo) приблизно за 90 секунд (тому що вони справді тестують "одиниці" і, отже, дуже швидкі). У нас є правило, що ми не можемо ввести код, коли тест не вдався.

Крім того, чи не хотіли б ви мати змогу запускати автоматизовану інтеграцію чи тестові тести свого коду та вирішувати проблеми, які одиничні тести не зможуть наздогнати?

Ви б не хотіли запускати їх на скриньках для розробників, тому що створити та підтримувати це середовище буде боляче. Інтеграційні тести також, як правило, дуже повільні у виконанні.

в який момент це корисно?

Це інвестиція, як і будь-яка інша.

Використовуйте його один раз, і ви можете вийти позаду або тільки зламати. Використовуйте його для кількох проектів, і ви, мабуть, вийдете попереду.

Це також залежить від типу додатків, які ви робите.

Якщо ви робите веб-додатки, які потрібно розгорнути на сервер додатків Java або IIS, то CI стає непроменителем. Те саме, якщо у вас є база даних як частина вашого проекту. Розгортання болісно виконувати вручну, і вашій команді з забезпечення якості (якщо у вас є) буде потрібно це так часто, як щодня в якийсь момент.

Крім того, ви можете побачити, як ваші потреби та проблеми узгоджуються з 12 кроками до кращого коду Джоела Спольського . Зокрема, 2, 3 та 10 (хоча вони всі цікаві та важливі).


2
+1 ... ОК зараз ти говориш зі мною! Аргумент "не втрачаючи час на створення будівель" мені дуже подобається. Наша збірка робиться кілька разів на день і займає лише один клік, але ... це повільніше, ніж виконання всіх тестів (тому диски втрачають час). Також мені подобається ідея складніших тестів: це я бачу, як ми могли б отримати користь від сервера CI. Щодо 2,3 і 10: так, так і так (одним клацанням миші на мурашиному завданні) ... Але людино, ці 12 правил слід оновити: чи використовуєте ви керування джерелами? Я б, швидше, мав не CVS, наприклад; ) (просто напівжартома;)
Седрік Мартін

7

У який момент це корисно?

  • Ваш цикл складання + тестування проходить за пару хвилин. З 5-хвилинним тестовим запуском ви більше не захочете запускати всі тести самостійно, особливо для невеликих змін.
  • Ви починаєте будувати кілька варіантів. Якщо у вас є кілька клієнтів з різними налаштуваннями, вам слід запустити тести для кожного варіанту, тому обсяг роботи почне зростати досить швидко. Чим би ви запустили тестовий набір для одного варіанту на машині розробника і залишите його на CI, щоб запустити його на решті.
  • Ви пишете автоматизовані тести інтеграції, які потребують певного налаштування тестового середовища. Тож ви хочете протестувати проти одного канонічного тестового середовища, оскільки розробники можуть змінити своє середовище різними способами через зміни в розробці. CI є найбільш підходящим місцем для канонічного середовища.
  • Тестери можуть просто витягнути останню версію з CI. Таким чином, їм не потрібно мати, вивчати та використовувати інструменти розробки, а також жоден розробник не повинен надсилати їм їх складання вручну.
  • Коли ви готуєтесь до випуску:
    • Тестування стає важливішим, тому мати одне місце з підготовленими складами для тестування ще корисніше.
    • Ви впевнені, що всі збірки побудовані з однаковим середовищем збирання, тому ви уникаєте проблем, які можуть бути спричинені незначними відмінностями між установками розробника.
    • Ви впевнені, що будуєте саме те, що перевіряється в системі управління версіями. Під час розробки, якщо хтось забуде щось перевірити, ви знайдете досить швидко, оскільки це не вдасться до наступного розробника. Але якби така збірка проскочила до якості або виробництва та вони повідомили про помилку, було б дуже важко відстежити.

Напевно, вам ще не потрібен ІС, але я думаю, він стане корисним, коли ви перейдете до етапу тестування. Дженкінс створюється за кілька годин, і це спростить ваше тестування і допоможе уникнути дурних помилок (особливо це трапляється, коли ви поспішаєте швидко виправити виробництво).


+1, спасибі Але аргумент збірки я ніколи не отримав: чи не додаток більш надійний, коли всі розробники можуть перевірити будь-яку версію та сконструювати таку ж збірку, кожен на своїй машині? Хіба ми просто не перекладаємо проблему "збірки, прив’язані до облікового запису розробника" на "збірку, прив'язану до сервера CI" ? Я маю на увазі: сам сервер CI може бути неправильно налаштований, і, отже, збірка стає залежною від тонкої різниці установки сервера CI !? Це сказав, що я ніби усвідомлюю, що це може бути корисним: я думаю, що мені просто потрібно «встановити його і подивитися»
:)

@CedricMartin: Сервер CI - це лише один, тому ви не будете вводити помилку за різницею між середовищами, які ви робили в цьому і попередньому вбудованому, і оскільки ви не виконуєте іншої роботи на сервері CI, менша ймовірність того, що ви зламаєте його .
Ян Худек

@CedricMartin: Очевидно, якщо сервер CI неправильно налаштований, ви помітите, що збірки поводяться інакше, ніж ті, що робляться на скриньках для розробників, оскільки розробники будуть збирати для себе весь час. Легше, ніж тоді, коли якесь певне поле для розробників неправильно налаштовано, оскільки це може помітити більше людей.
Ян Худек

6

Для мене КІ стає цікавим, якщо у вашій команді більше 1 члена.

Ви повинні перестати думати про CI як "інший ПК, який виконує тести для мене". CI про наявність визначеного та автоматизованого процесу збирання та управління випусками.

CI - це єдина авторитетна організація, яка створює ваше програмне забезпечення. Якщо він не базується на CI, просто не сталося.

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

Проблеми, яких він уникає:

  • Хто відповідає за створення релізу
  • Чи доступна ця особа цілодобово
  • Але це базується на синдромі моєї машини
  • Знімає всю неоднозначність щодо того, якою була версія, яку ми випустили

Переваги (просто занадто багато, щоб згадати всі):

  • Автоматизована нумерація версій
  • Інтеграція відстеження проблем
  • Автоматизована генерація метрики
  • Статичний аналіз коду
  • Автоматизоване розгортання
  • Багатоступеневі налаштування

5

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

Перш за все, CI - це розуміння та якість. Хороший CI наближає вас до вашого проекту, дає вам належний відгук про показники якості, документацію, відповідність стандартам кодування тощо. Він повинен надавати вам інструменти для легкого візуалізації всього цього, а також дозволяє вам легко і легко розпізнавати пов’язати набір змін із конкретним знімком усіх цих показників проекту.

Йдеться не лише про тестування одиничних тестів. Зовсім ні! Що підводить мене до якості. CI сприймає помилки, не уникає їх і не відкидає. Що це робиться, це просто забезпечити вам інструмент для виправлення помилок на початку, а не пізніше. Таким чином, ви дійсно не здійснюєте раніше перевірений код на сервері CI. Хоча ви повинні прагнути вводити чистий і не порушений код, ви фактично використовуєте сервер CI, щоб автоматично запустити конструктор інтеграції автоматично через ваш код і дати йому оцінити, чи все вийшло правильно. Якщо є, акуратне! Якщо це не сталося, немає жодних проблем - хороші практики ІС стверджують, що наступним пріоритетом має бути лише виправлення того, що було порушено. Який у хорошому сервері CI вам слід легко вказати.

Зі збільшенням чисельності команди інтеграція коду кожного природно стає складнішою. Завданням централізованого сервера CI повинно бути тестування всіх інтегрованих частин і зняття цього тягаря з членів команди. Таким чином, ви повинні мати всіх, хто здійснює раннє (і як можна більш чітке), а потім моніторинг стану складання (зазвичай там задіяно сповіщення). І знову, якщо щось зламається через певну відданість розробника, це негайно стає його відповідальністю виправити це і негайно повернути ці автоматизовані збірки повернутися до статусу ОК.

Отже, ви бачите, на мій погляд, кожен окремий проект має вигоду від постійної інтеграції. Справа в тому, що до цих пір, в силу вражаючих складностей кожного сервера CI, про який я знаю, люди справді захищали практику CI на менших / простіших проектах. Тому що, давай, людям доводиться робити більше, ніж витрачати дні на налаштування некрасивого, надмірно складного, недостачаного, роздутого програмного забезпечення.

У мене була ця саме така проблема, і саме це змусило мене розвивати Сінтіент у вільний час приблизно від року тому. Моя передумова полягала в тому, щоб спростити встановлення, налаштування та використання, а також забезпечити її доставку за тими показниками якості, які всі інші в значній мірі виходять з ладу або недоїдають. Отож, після цієї тривалої відповіді приходить мій безсоромний штрих із зазначенням посилання на GitHub для проекту (який є безкоштовним та відкритим кодом, natch). Він також має деякі приємні скріншоти, мабуть. :-) https://github.com/matamouros/cintient

Сподіваюся, я вам допомогла.

(ПРИМІТКА. Відредаговано після коментаря Брайана Оклі про те, що мені потрібно було більше часу, щоб створити кращу відповідь. Я також вважаю, що він мав рацію.)


Я проголосував, оскільки це не відповідає на питання, це лише реклама. Ви ніколи не звертаєтесь до того, коли частина питання, крім того, щоб неявно означати "зараз, з моїм інструментом".
Брайан Оуклі

Я потребував певного часу, щоб відредагувати відповідь, як це запропонував @ bryan-oakley.
matamouros

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