Чи існує інструмент ІС, який не гарантує регресу на рівні якості галузі?


10

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

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

Чи є інструмент CI, здатний насправді запобігати подібним регресіям, який би здійснював попередню перевірку якості QA і дозволяв би здійснювати комбінації лише тоді, коли кодова база, оновлена ​​відповідними комітетами, також проходила б ці перевірки якості перед попередньою фіксацією, гарантуючи таким чином мінімум рівень якості галузі?

Оновлення: припущення полягає в тому, що відповідні автоматизовані верифікації якості з відповідним покриттям для виявлення відповідних регресій доступні для виклику інструментами CI.


Я постійно цікавлюсь правильним способом розуміння цього питання (та власною рекомендацією у власній відповіді). Якби я замінив "моніторинг" на "після фактів", а "запобігання" на "попереджувати їм, що вони відбудуться", чи буде це більш-менш те саме питання? Також, можливо, ви можете додати якийсь приклад сценарію, щоб пояснити різницю?
Pierre.Vriens

@ Pierre.Vriens Це краще?
Дан Корнілеску

Відповіді:


6

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

Atlassian має кілька цікавих застосувань гачків Git :

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

Якщо ви використовуєте Git, гачки є дуже потужними (і подібні гачки є для SVN , Mercurial та інших систем управління версіями), і вам може бути корисним використовувати їх для запуску перевірок попереднього вчинення.

Документація Git містить сторінку про створення гачка для відхилення натискань, якщо вони не відповідають певним критеріям, які легко можна адаптувати до цього випадку використання.

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

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


Що ж, хороший образ SW, який створює, але чи є DOA від тестування перспективним? Devs не можуть перевірити зміни коду, навіть якщо вони будують, тому вони будуть так само заблоковані. Тож загалом я б поширював відмову від виконання зобов’язань на все, що не відповідає мінімальній контролі якості, вибраному балансуванням 2 суперечливих вимог: якомога вище, щоб максимально збільшити кількість розробників, захищених від блокування, і якомога менше, щоб затримка перевірки якості не затримувалась не надто сповільнювати процес.
Дан Корнілеску

Прикладом цього може бути модель запиту на витяг, де ви можете поставити певні обмеження щодо того, може бути запит на об'єднання об'єднаним чи ні. Наприклад, ми (моя компанія) використовуємо Atlassian Bitbucket Server, і є варіанти вимагати принаймні N кількість схвалень та X кількість складових, що проходять, для даної гілки, перш ніж запит на витяг буде дозволено об'єднати. Це відверто не відкидає. Але запобігає випадковому злиттю, коли тести не вдається або інші очі ще не бачили код.
Енді Шінн

@AndyShinn: Так, я вважаю це досить корисним - GitHub також пропонує захищені гілки та перевірки на запити на виклики , які часто корисні.
Aurora0001

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

2

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

Якщо гілка є сучасною з її верхнім потоком (там, де PR зливається), і її тести проходять, вони все одно пройдуть після злиття; стан цільової гілки після злиття буде відповідати стану вихідної гілки перед злиттям.

Як правило, не особливо складно (залежно від використовуваних інструментів) визначити, чи відповідає галузь джерела в PR-цілі цільовим, а також чи має збірну CI збірку. Ви можете використовувати це як вимогу (за політикою та / або нав'язаною програмою) для об'єднання запиту на витяг.


"Якщо гілка є сучасною з її верхнім потоком (де PR зливається), і її тести проходять, то вони все одно пройдуть після об'єднання" - Чому? Злиття - це розрив, він приносить невідомі. Як і конфлікти - код може навіть не побудувати, поки вони не будуть вирішені. Вам потрібно запустити тести і підтвердити, що вони проходять для будь-якого злиття гілки. Я б сказав навіть для швидкого перемоги вперед, якщо ви хочете, щоб це було безпечно. Дивіться apartsw.com/insights/2016/11/16/…
Дан Корнілеску

Гм, так, така гарантія можлива, перевірте мою відповідь. Ну, можливо, я маю уточнити: під регресією я маю на увазі гірші результати, ніж результати базової галузі (ігноруючи можливість помилкових позитивних результатів, їх потрібно вирішити, оскільки вони можуть перекосити базову лінію, зірвавши все це і вимагаючи втручання людини). Переривчасті помилкові негативи - це лише неприємність, уповільнює справи, але з ними можна боротися.
Дан Корнілеску

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

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

Моя думка, що це не той інструмент CI, який пропонує такий захист, це ти, написавши тести. Інструмент CI не може надати жодних гарантій за винятком наданих вами тестів.
Адріан

1

Справжні інструменти безперервної інтеграції (на відміну від постійного тестування), такі як Reitveld і Zuul, можуть допомогти, хоча вони є настільки ж хорошими, як тести, які ви пишете та огляди коду, які ви робите.


Але Reitveld видається інструментом спільного перегляду коду, а не інструментом CI, я щось пропускаю? Це те, що я подивився: github.com/rietveld-codereview/rietveld
Dan Cornilescu

Здається, Зуул справді пов’язаний, я вивчу це детальніше.
Дан Корнілеску

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

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

1

Використовуючи GitLAB, ви можете встановити в налаштуваннях проекту так, щоб дозволити злиття лише тоді, коли конвеєр вдався, так що ви можете мати справді безперервну інтеграцію, поєднуючи це, додаючи ваш QA до списку схвалень злиття та за допомогою Dynamic Environment, ви можете забезпечити якість перш ніж злитися з господарем.


Це працює, але тільки якщо ви не дозволите другому злиття запустити перевірки якості перед тим, як попереднє злиття завершено, інакше 2-е злиття не побачить першого, не залишаючи місця для регресій. Іншими словами, злиття (включаючи їх перевірки якості) повинні бути повністю серіалізовані, що не масштабується для великих команд.
Дан Корнілеску

0

ApartCI - це система CI, розроблена саме для запобігання регресу, гарантуючи таким чином рівне або підвищення рівня якості філій. Ще в бета-версії.

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

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

Інструмент також розроблений для легкого масштабування - здатний підтримувати дуже високі темпи змін, що надходять, та підтримувати 100s / 1000s розробників, що працюють в одній галузі інтеграції.

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


Добре, що ви додали відмову від відповідальності, але особисто я вважаю, що питання і самовідповідь на нього, просуваючи власну компанію чи продукцію, є формою спаму.
Тельпер

Я задав питання щодо мета, чи це дозволено чи ні: meta.devops.stackexchange.com/q/59
THelper

SnapCI теж робив це. RIP.
paul_h

@paul_h, якщо я не пропускаю щось SnapCI та його рекомендована заміна GoCD, вони базуються на підтвердженнях після завершення (спровокованих опитуванням SCM), тому вони все ще є лише моніторингом. За винятком PR-перевірок, але, якщо ці перевірки не повністю серіалізовані, вони можуть лише знизити частоту виникнення регресії, але не усунути їх повністю.
Дан Корнілеску

Ден, не опитуючи ні, гачки. І до короткотривалої гілки PR, яка ще не об'єднана в магістраль / майстер - trunkbaseddevelopment.com/game-changers/…
paul_h
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.