Занепокоєння щодо розгортання справжнє. Давайте спробуємо зрозуміти людські емоції, пов’язані з розгортанням, і вивчимо найкращі практики, щоб мінімізувати страх.
Нещодавній збій за участю CrowdStrike вплинув на 8,5 мільйонів операційних систем Windows, що призвело до збоїв у роботі різних глобальних служб, включаючи авіакомпанії та лікарні. Численні аналізи вивчили першопричину самого інциденту.
Однак, як інженер-програміст, я вважаю, що ми втрачаємо аспект людських емоцій, пов’язаних із розгортанням, зокрема страх переривання роботи. Саме в це ми і спробуємо зануритися в цій статті. Ми розглянемо:
Перш ніж заглиблюватися в страх розгортання з точки зору інженера програмного забезпечення, давайте спочатку зрозуміємо роль інженера випуску. За останні роки розробка випусків значно розвинулася завдяки сучасним інструментам CI та CD і стандартизації Kubernetes. Незважаючи на ці досягнення, основні обов’язки залишаються незмінними:
На відміну від інженерів випуску, як інженер програмного забезпечення, який працює в команді продукту, ми можемо дбати лише про певні аспекти розгортання:
Хоча є речі, які нас турбують, є й ті, які нам байдужі:
Отже, яке відношення цей страх має до безперервного розгортання?
багато.
Дослідження підтвердили [декілька переваг](https://dora.dev/capabilities/continuous-delivery/#:~:text=DevOps%20Research%20and%20Assessment%20(DORA,as%20higher%20levels%20of%20availability) безперервного розгортання (CD), і, як не дивно, багато з яких мають психологічний характер. Безперервне розгортання усуває «людину в циклі», тому вимагає сильної довіри до тестової інфраструктури.
Іншими словами, автоматизовані тести не тільки забезпечують надійність виробництва, але й забезпечують психологічну безпеку , іноді нераціонально, зменшуючи страх перед розгортанням. Як розробник, мені зручніше вносити зміни в процес компакт-диска, ніж коли мене просять перевірити зміни вручну.
Однак, незважаючи на популярність цих стратегій CD, багато компаній все ще запускають розгортання вручну (є людина в циклі), що вказує на обережний підхід до впровадження CD. Така поведінка свідчить про те, що команди вважають за краще контролювати процес випуску та втручатися, якщо це необхідно.
Це важливо розуміти з точки зору психологічної безпеки. Розгортання вручну передбачає, що хтось наглядає за процесом і вирішує проблеми, коли щось йде не так. Хоча це забезпечує відчуття безпеки, це також може викликати страх у людини, яка розгортає, і може бути схильною до помилок людини.
Незважаючи на недоліки, більшість команд керують розгортаннями вручну. Типове розгортання вручну може включати кілька кроків:
Хтось доглядає за всім процесом розгортання перед тим, як випуск виходить. Цій особі доручено втрутитися, коли і якщо є ознаки проблеми. У командах є особа за викликом, яка керує їх розгортанням і вирішує проблеми, коли вони виникають.
Деякі команди мають спеціальну групу розробників випусків, яка забезпечує безперебійне виконання випусків. Оскільки це означає високий ступінь спеціалізації, процес розгортання може бути більш ефективним і надійним.
Деякі компанії ведуть електронну таблицю для перевірки внесених змін. Це дозволяє компаніям систематично переглядати та затверджувати ці зміни, гарантуючи, що вони відповідають заздалегідь визначеним стандартам якості.
Окрім електронних таблиць, компанії додають ще один рівень контролю якості вручну. Ручна перевірка якості тестує нові випуски в проміжних середовищах перед розгортанням їх у виробництві. Однак середовище тестування не є надійним, тому деякі сценарії з реального життя не будуть враховані.
Багато речей можуть піти не так для будь-якої команди розробників програмного забезпечення, яка покладається виключно на ручне розгортання:
Це може створити вузькі місця, що призведе до затримок випуску та людських помилок у деяких випадках. Крім того, у команди можуть виникнути проблеми, коли ця конкретна особа йде або не може виконати необхідні завдання.
Немає стратегії для вирішення несприятливого виробничого інциденту. Коли трапляється інцидент, команді випуску доводиться боротися, щоб знайти відповідних зацікавлених сторін, які допоможуть вирішити та прийняти рішення.
Друкарські помилки в командах або сценаріях або забули запустити етапи перед розгортанням або після розгортання.
Оскільки розгортання вимагає догляду за процесом, це займає багато часу. Це також призводить до значного зниження частоти розгортань. Наприклад, якщо для моніторингу всього розгортання потрібна година, команда випуску може вирішити пропустити розгортання в дні з незначними змінами, щоб заощадити час.
Від команди продуктів незрозуміло, у якому стані випуски та коли їхні зміни потраплять у виробництво.
Дивлячись на ці виклики, легко зрозуміти, чому інженери бояться розгортання. Ризик невдач у розгортанні, високі ставки та тиск з метою скоротити час простою також сприяють цьому страху.
Ці збої можна звести до мінімуму шляхом збільшення автоматизації тестування. Проте, оскільки ці тести проводяться в тестовому середовищі, ви не повинні очікувати, що автоматизований тест виловить усі можливі помилки. Невдачі слід очікувати, але з меншою частотою.
Просто налаштувати безперервне розгортання? Легше сказати, ніж зробити. Незважаючи на недоліки, ручне розгортання все ще добре, якщо ним правильно керувати. Цілі повинні бути:
Стратегії Canary та Rollback можуть допомогти зменшити наслідки відключення та в багатьох випадках автоматично запобігти кризі.
Canary випуск надає ваш новий випуск невеликій частині трафіку робочого середовища. Це дає командам зрозуміти проблеми, які могли не виникнути під час тестування.
З іншого боку, стратегія відкату допомагає інженерам повернути випуск до попереднього стану стабільної версії. Це робиться, коли виникають нові проблеми після розгортання у виробничому середовищі.
Визначте стандартні методології розгортання, які забезпечують ефективність, послідовність, надійність і високу якість програмного забезпечення. У своєму звіті про стан DevOps DORA показує, що надійність передбачає кращу продуктивність роботи. Крім того, наявність стандартизованого процесу забезпечує повторюваність процесів випуску, які можна автоматизувати. Автоматизація цього процесу допомагає команді знизити виробничі витрати.
Демократизація процесу розгортання усуває залежність від конкретних осіб. Якщо ми надаємо повноваження будь-якому розробнику програмного забезпечення для розгортання, це повільно зменшує страх. «Якщо «будь-хто може розгорнути, це не повинно бути надто важко». Поділіться своїми лего!
Щоб зменшити хвилювання щодо розгортання, нам потрібно розгортати частіше, а не рідше. У звіті DORA також наголошується, що розгортання невеликих пакетів з меншою ймовірністю викличе проблеми та допоможе знизити психологічний бар’єр для розробників.
Роз’яснення того, що розгортається, покращує досвід розробника. Зробіть розробникам простіше знати, коли відбувається розгортання та які зміни включено. Ця прозорість допомагає розробникам відстежувати, коли їхні зміни стають активними, і спрощує розслідування інцидентів.
Мають бути визначені кроки для відкатів і виправлень, оскільки це допомагає усунути будь-яку нерішучість із виробничими інцидентами. Наприклад, повинні бути окремі кроки збірки та розгортання, які команди повинні виконувати для легкого відкоту.
Подібним чином стандартизація того, як працювати з гарячими виправленнями та виправленнями, може спростити роботу, коли ставки високі.
Прапорці функцій подібні до перемикачів, які можуть вимкнути нову функцію, яка спричинила інцидент у виробництві. Це може дозволити інженерам швидко вирішувати виробничі інциденти.
Команди програмного забезпечення повинні розглядати розробку випусків як пріоритет із самого початку розробки продукту, щоб уникнути дорогих помилок. І ми не повинні дозволяти таким інцидентам, як збій Crowdstrike, скалічити нашу практику розробки. Подолання страху розгортання та запобігання виробничим інцидентам передбачає кілька ключових стратегій:
У Aviator ми створюємо інструменти продуктивності розробника, починаючи з перших принципів, щоб дати розробникам можливість створювати швидше та краще. Щоб дізнатися про сучасний спосіб керування розгортаннями, перегляньте Aviator Releases .