Представляем новую статью из цикла «Карьера в IT». Она посвящена должности DevOps engineer — такие специалисты работают на стыке областей разработки и системного администрирования, обеспечивая эффективность процесса поставки ПО.
DevOps (development + operations) — это зародившаяся в 2009 году методология, нацеленная на взаимодействие программистов и системных администраторов для увеличения частоты выпуска релизов. Соответственно, DevOps engineer — специалист, который работает на стыке этих двух должностей и занимается автоматизацией жизненного цикла приложения (включая проектирование, разработку, тестирование, развертывание, поддержку и мониторинг).
По данным ДОУ, среднему украинскому DevOps инженеру 28 лет, он имеет зарплату $1200-2700 и опыт работы 4 года.
Задача и обязанности
Главная задачам DevOps инженера — максимально увеличить предсказуемость, эффективность и безопасность разработки ПО.
Если рассматривать полный жизненный цикл ПО, то на этапе оценки DevOps специалисты получают первичную информацию о необходимости нового кодирования и внесения изменений в ИТ-инфраструктуру. На этапе проектирования — определяют требования к инфраструктуре. На этапе разработки и тестирования — занимаются развертыванием продукта, а также поддержкой средств для разработки, интеграционным и нагрузочным тестированием ПО для проверки готовности операционной среды.
Основная часть работы DevOps инженера приходится на этап выпуска релиза — поставки продукта заказчику. В центре внимания находится производительность всех потоков процесса доставки. Такой специалист следит за тем, чтобы известные баги никогда не передавались на следующий этап работ, никогда не развивалась локальная оптимизация, приводящая к созданию глобальной деградации.
«Классические программеры понятия не имеют о том, как их приложение будет развертываться в продакшене, интегрироваться с десятком других приложений. Поэтому нужны люди, которые будут разбираться в коде на достаточном уровне, чтобы вычищать за разработчиками мусор из конфигов, дописывать костыли по необходимости, связывать сервисы воедино, деплоить это добро на тестовые стенды и автоматизировать процессы тестирования, релиза и обновления».
В обязанности DevOps engineer входит:
— Развертывание поставленного разработчиками релиза в производстве;
— Интеграция и углубление процессов разработки в поставку;
— Стандартизация окружения разработки;
— Настройка инфраструктуры на особенности разрабатываемого ПО;
— Подготовка продуктивной среды к частым внесениям изменений;
— Обнаружение и исправление проблем;
— Автоматизация процессов.
«Автоматизация всяческая, мониторинговые системы, синхронизация данных и прочее. Например, такая задача — практически по одному клику поднять уменьшенную копию продакшн инфраструктуры, чтобы одна из команд могла развернуть свой бранч для тестирования».
«Автоматизация различных задач, связанных с деплоями софта, который разрабатывается, деплоями системного софта, конфигурированием. Обеспечение мониторинга, реакция на различные внештатные ситуации. Улучшения платформ в плане снижения цены за инфраструктуру, в плане производительности и простоты. Предоставление различных доступов для разработчиков (например, в репозитории, VPN). Дизайн систем, их архитектура».
«На мой взгляд, основными задачами DevOps являются автоматизация процессов разработки (выкатить ветку из git для тестирования, выкатить определенную версию приложения в production, автоматизация управления инфраструктурой), мониторинг состояния приложения, по возможности автоматическое восстановление приложения и соответствующие оповещения членам команды».
В ходе работы DevOps engineer использует инструменты, автоматизирующие выделение системных ресурсов и управление. К таким инструментам относятся различные средства управления конфигурациями, виртуализации на разных уровнях, автоматизации операционных процессов, облачные инструменты выделения ресурсов по требованию.
«Я постепенно „переехал“ в DevOps из Dev отдела. В работе приходится активно контактировать с Dev, Ops и QA отделами, c другими отделами реже. Если описать должность DevOps одной фразой, я бы сказал так — создавать инструментарий для Dev, Ops, QA etc отделов, чтобы им было легче и удобнее работать».
«Создаем новые виртуальные машины, пишем сервисы для их дополнительного мониторинга и так далее».
«Я вчера поднял teamcity/gradle+gitlab и настроил автоматическую выкладку сайта по коммиту в репу на сервер. Вот чем-то таким девопсы и занимаются».
Преимущества и недостатки
Главное достоинствопрофессии DevOps engineer — рост интереса компаний к концепции DevOps. По данным EMA, около 30% компаний уже реализовали или планируют реализовать DevOps в ближайшее время. То есть спрос есть — без работы хороший специалист не останется.
Самих DevOps специалистов привлекает то, что в работе они имеют 100% загрузку, в отличие от профессии системного администратора.
«Нравится фактор неожиданности — это делает работу довольно интересной и не превращает в рутину».
Другой плюс — широкая специализация:
«На мой взгляд, девелопмент проигрывает оперейшеналу по простым причинам. Девелопер имеет в руках инструмент, которым он делает свою работу — синтаксис языка и какие-то там языковые примочки и особенности. Оперейшенал инженер знает кучу всего, на чем строится современные информационные системы, как они работают, и изучение какого-то Ruby мало чем будет отличаться от изучения системы мониторинга Ganglia».
Некоторых привлекает то, что результат работы можно «потрогать руками»:
«Для меня построение сложных систем и поддержание их в реальной жизни интереснее, чем чистый код, который запускают в лабораторных условиях. Грубо говоря, ехать на настоящей лошади по степи и потом мыть её, скрести, кормить — это гораздо интереснее и приносит больше удовлетворения, чем сферический конь в вакууме».
Недостаткипрофессии, похоже, не отличаются от таковых у системных администраторов:
«Ночные неожиданности».
Как стать и куда двигаться дальше
Большинство DevOps инженеров — это системные администраторы, выучившие инструменты программирования, или же разработчики, разобравшиеся с тонкостями процессов operations. Желательно иметь базовое техническое образование, разбираться в вопросах, связанных с системным администрированием и автоматизацией различных задач.
«В голове нужно иметь библиотеку по всем доступным технологиям, начиная от методов кодирования сигналов до последнего модного продукта Open Stack».
Необходимые качества:
— Аналитический склад ума;
— Стрессоустойчивость;
— Умение не сдаваться даже в безвыходных ситуациях.
«Важно понимать, что не разработчики плохие и делают такой продукт, а просто поставить себя на их место и помочь».
Возможные карьерные пути DevOps инженера:
— Расти как DevOps специалист, углубляться в специализацию и осваивать смежные технологии;
— Переквалифицироваться в разработчики, если начинали как системный администратор;
— Переквалифицироваться в сисадмины, если начинали как разработчик (если интересно больше работать с инфраструктурой, чем с разработкой);
— Переквалифицироваться в инженеры по IT-безопасности;
— Также открыты пути в системные архитекторы, тестировщики (в том числе автоматизаторы), проектные менеджеры.
«На самом деле, лучше просто быть хорошим специалистом в _ЛЮБОЙ_ своей области, которая тебе нравится, и жить полной жизнью. И неважно, кто это — DevOp или химик нефти».
P.S. Спасибо за помощь в написании статьи Алексею Асютинуи еще 5 украинским DevOps инженерам, которые поделились с DOU таинствами своей профессии. Приведенные в статье цитаты взяты из их рассказов.
Остальные статьи цикла:
— Карьера в IT: должность Team Lead
— Карьера в IT: должность Software Architect
— Карьера в IT: должность Project Manager
— Карьера в IT: должность CTO
— Карьера в IT: должность QA engineer
— Карьера в IT: должность QA Automation engineer
— Карьера в IT: должность Бизнес-аналитик
— Карьера в IT: должность системный администратор
— Карьера в IT: должность Data Scientist / Machine Learning Engineer
— Карьера в IT: должность Technical Writer
— Карьера в IT: должность Delivery Manager
— Карьера в IT: должность Software Product Manager