Чи можете ви робити постійне розгортання з молодшими програмістами?


11

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

Тепер це виглядає чудовою ідеєю, доки ви пам’ятаєте писати тести, перевіряєте зміни перед вступом, знаєте, як користуватися версією API, і ви не збираєтеся скидати базу даних у свій інкрементальний сценарій оновлення db, який виконується при розгортанні (який це не велике питання, як воно повинно провалитися на сцені).

Але чи можливо це зробити з молодшими програмістами? Можливо, мені доведеться реалізувати схему pull-request. Це зробило б менш схожим на постійне розгортання (це я здогадуюсь)?

Я сподіваюся, що це не ґрунтується на думці, і я можу розраховувати, що ви поділитесь своїм досвідом, дякую.

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


it is more scary to wait a week to deploy all micro services at once to make sure that everything works together, than to strictly enforce api versioning, write lots of automatic tests (...), and auto deploy to production as soon as your commit passes as tests on stage- на цій думці;) IMHO набагато складніше забезпечити успіх при незалежному розгортанні сервісу, ніж при монолітному підході: softwareengineering.stackexchange.com/a/342346/187812 . І з справжнім CI (без функцій / інтеграційних гілок) вам не доведеться чекати тиждень.
Дан Корнілеску

Хороша система ІС повинна допомогти - всі помиляються, не лише юніори. А поломки не обов'язково означають, що розробники допустили помилки або не виконали свою роботу належним чином, див. Як успішно попередньо перевірені зміни можуть спричинити регресії, які повинні були бути зафіксовані?
Дан Корнілеску

Відповіді:


16

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

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


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

@doker Якщо ви турбуєтеся про те, що вам доведеться поєднувати багато служб разом, не робіть цього. Переконайтеся, що кожна послуга (і внесені зміни) стоять самостійно. Якщо сервіс A змінено, зробіть швидкий перегляд коду, щоб переконатися, що він буде працювати з новими змінами та чи зможе він розгортатися самостійно. Якщо будуть внесені порушення, скористайтеся оглядом коду як місце для застосування версії API. Якщо сервіс B залежить від сервісу A, виконайте роботу над A, а потім вийміть це. Тоді попрацюйте над B. Якщо молодші руки ви зміните на A, B, C і D, і всі вони взаємозалежні, їм потрібно документувати це, щоб ви могли переглянути.
Becuzz

1
@doker Такі сценарії є тим, чому люди безперервного розгортання / доставки часто є дуже комунікаційними перемикачами. Якщо ваші зміни, як правило, стоять за перемикачами функцій (не обов'язково кожних невеликих змін), ви можете розгортати фрагменти, коли вимкнено функції, увімкнути їх, коли всі шматки будуть на місці, і вимкнути їх, якщо виявите значну проблему.
Дерек Елкінс покинув SE

3

Постійне розгортання буде добре працювати, якщо у вас є гарний набір автоматизованих тестів.

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

Значок статусу збірки CatLight

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


3

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


1

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

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


1

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


Редагування / оновлення : Відповідно до коментаря RubberDuck; ця відповідь передбачає, що ваша мета об’єднання для інтеграції - це галузь розвитку, а не галузь оцінки або випуску.

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

1. Молодші розробники рідше спілкуються зі своїми колегами або керівником

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

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

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

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

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

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

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

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

3. Ви повинні бути менш впевнені, що молодший розробник або інший новий член команди зрозумів вимоги

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

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

4. Вони, ймовірно, менш знайомі як із загальними моделями, з архітектурою існуючого коду, так і з відомими інструментами та рішеннями

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

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

5. Тривалі періоди між кодовими комісіями / злиттями ускладнюють ідентифікацію та виправлення дефектів

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

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

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

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


Підводячи підсумок; Основними перевагами безперервної інтеграції / безперервного розгортання є:

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

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


OP говорить про модель, де зобов'язується освоїти фактичне впровадження у виробництво . Отже, ні. Не нормально ламати головну гілку в цій моделі.
RubberDuck

@RubberDuck хороший момент, додав коментар, щоб зрозуміти, що цей підхід призначений для інтеграційного тестування, а не для натискання нових змін коду безпосередньо до виробничої галузі.
Бен Коттрелл

0

Так, ви можете практикувати CI з молодшими розробниками. Було б дурно не робити в нинішньому кліматі розвитку. Це шалено корисно мати можливість наштовхуватися на репо, а потім автоматично автоматично об'єднуватися в інсценізуючий код - і дивитися все це в режимі реального часу в Тревісі (або Bamboo, Pipelines тощо ...)!

Візьміть свого хлопця з DevOps і попросіть його пройти процес з ними, а також старший розробник у режимі очікування, щоб просто стежити за речами та зв’язувати його зі своїми оглядами коду (ви це робите, правда?)

Якщо ви стурбовані тим, що шийт-код переживе, це не на CI, і не на юніорах: це на вас .

Тож допоможіть їм покращитись та звикнути до швидшого розгортання коду сцени / prod. Ви будете дякувати собі в довгостроковій перспективі.


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