Про те, що таке DevOps, DevOps-культура і як стати DevOps-розробником нам розповів Андрій Бєлов, провідний інженер із супроводу програмного забезпечення в EPAM.
Опиши свій звичайний робочий день
DevOps-інженер має дві основні задачі: супровід команди розробників і автоматизація розробки. Перше завдання часто накладається на вже заплановані активності та може затягтися на кілька годин чи навіть днів. Це відчутно впливає на роботу з автоматизації. Щоб привести інфраструктуру до спільного знаменника, доводиться спілкуватися з різними командами. Тому протягом дня у мене багато робочих зустрічей і дзвінків. І потрібно часто переключатися між задачами, змінювати контекст.
Що таке DevOps?
DevOps — це й набір практик, і методологія взаємодії спеціалістів. DevOps — це комплексна сфера. Вона охоплює не лише автоматизацію, розгортання середовищ і забезпечення циклу розробки. Це також про стабільність роботи додатків, моніторинг, забезпечення тестування та експлуатації додатку.
Повторюваність, розгортання і автоматизація всього, що тільки можливо.
В чому полягає DevOps-культура?
Перш за все в тому, що ми змінюємо фокус з відстеження змін у інфраструктурі на забезпечення швидкості доставки готового продукту в робоче середовище. Системи, що знаходяться нижче (віртуальні машини, середовища, мережі), ми не обслуговуємо, як дещо, що не можна чіпати. Натомість притримуємося методології immutable, коли кожен компонент системи має залишатися незмінним. Якщо він вийшов з ладу або потребує переконфігурації, ми його вилучаємо і замінюємо новим. І, звичайно, автоматизуємо усе, що тільки можна автоматизувати. З оглядом на те, як багато зусиль це вимагає.
Що дає автоматизація?
Автоматизація дає код, який вільно читається — будь-який інженер зможе легко зрозуміти, чому так було зроблено і навіщо. Таким чином, ми значно прискорюємо процес розробки і підвищуємо його надійність.
Хто входить до складу DevOps-команди?
Перша частина команди — колишні системні адміністратори, які вміють писати код. Друга частина — Quality Assurance інженери, які вміють створювати надійний цикл тестування додатку. Вони володіють навичками програмування, знають ООП — це допомагає їм писати автотести у зручному для сприйняття та підтримки вигляді. І третя частина — розробники. Вони мають цінну навичку програмування. Вони йдуть в інфраструктуру, тому що їм подобається працювати із системами нижчих рівнів.
Що саме роблять DevOps-інженери?
- Автоматизують розгортання системи — пишуть скрипти на Groovy або Python з використанням різноманітних фреймворків (найчастіше за допомогою інструменту Terraform або AWS CloudFormation, тому що зараз ми все більше "йдемо у хмари").
- Описують систему моніторингу, узгоджують її з розробниками, визначають ключові індикатори, які вказують нам, що додаток працює так, як треба.
- Забезпечують цикл розробки — пишуть скрипти автоматизації для Jenkins та CI/CD процесів на Git Lab CI або Git Hub.
Навіщо йти в DevOps?
- Затребуваність. На світовому ІТ-ринку зараз близько 30 млн розробників. Їхня кількість зростатиме — автоматизація вимагатиме створення 100 млн робочих місць до кінця десятиріччя. Коли розробників багато, може виникнути хаос в процесах розробки та інфраструктурі. І тому професія DevOps користується попитом: все це потрібно обслуговувати.
- Конкурентна платня. Вже третій рік поспіль ми спостерігаємо бум зарплат в DevOps. І вони залишаться конкурентними.
- Прийняття ключових рішень. Якщо ви любите брати на себе відповідальність у прийнятті рішень, то DevOps надасть вам чудову можливість реалізувати свій потенціал.
DevOps — точка дотику різних команд: розробки, Quality Assurance, делівері, бізнес-аналізу.
Що є складним у професії?
DevOps-інженер — це різнобічно розвинений спеціаліст. Він знає і алгоритми, і системне адміністрування, й інфраструктуру, і мережі. Отже, потрібно бути обізнаним у різних аспектах розробки. Необ’язково детально, але спектр знань, в які потрібно заглибитися, широкий.
Як зрозуміти, чи підходить мені DevOps-напрям?
Бажання зійти до машинного відділення, щоб без остраху забруднити руки у мазуті, полагодити зламану шестерню у двигуні — я вважаю, це одна з must-have якостей для DevOps. Якщо ви любите операційні системи, налаштування заліза і опцій мережі. Наприклад налагодити додаток, щоб він працював швидше, або оптимізувати використання пам’яті.
Якими знаннями повинен володіти майбутній DevOps?
Обов’язково знання інформатики та обчислювальних систем. Дуже часто виникають задачі, в яких потрібно прийняти рішення, що значно вплине на подальшу розробку і експлуатацію. Необхідно розуміти, для чого потрібна операційна система, мати уявлення про те, як влаштовані мережі, які є варіанти організації мереж і протоколів. Потрібно знати, що таке процес розробки. Знати систему контроля версій Git — це один з головних інструментів. Так само і системи збирання — Jenkins, GitLab CI, Travis, Circle CI.
А як щодо soft skills?
Вміти аргументовано обстоювати свою свою точку зору: довести, що твоє рішення є найкращим для розв’язання цієї проблеми. Нагодяться навички тайм-менеджменту: перш за все самоорганізація в умовах підвищенного попиту на допомогу з боку інших команд. Вміння розвиватися самостійно: приділяти час читанню книжок, проходженню курсів, вивченню відеоуроків.
Потрібно бути доволі гнучким і стресостійким. Вміти швидко переключатися між контекстами. Але при цьому досить глибоко й докладно заглиблюватися у проблему, щоб вирішити її оптимальним способом.
Що ти порекомендував би прочитати новачкам?
- "Філософію Unix" Майка Ганцарза;
- "Комп’ютерні мережі" Ендрю Таненбаума та Девіда Уезеролла;
- "The Phoenix Project" Gene Kim, Kevin Behr, and George Spafford.
А також курси Computer Science 101 від MIT і Harvard University:
- Introduction to Computer Science and Programming in Python.
- Advanced Data Structures.
- CS50's Introduction to Computer Science.
Також раджу обов'язково підписатись на оновлення в Телеграм-спільноті EPAM University і моніторити появу курсів з DevOps від EPAM, щоб не пропустити свій шанс блискавично розпочати кар'єру.