DevOps-инженер

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

DevOps-инженеры – это специалисты, которые умеют автоматизировать процессы и понимают, как работают разработчики, тестировщики и менеджеры. Последние несколько лет они очень востребованы, т.к. умеют программировать, постоянно изучают новые инструменты и готовы решить самые сложные задачи на стыке разработки и системного администрирования.

В статье мы расскажем о методологии DevOps и специалистах, владеющих этой методологией.

Devops-инженер — это администратор, область деятельности которого лежит немного в стороне от разработки продукта (ов). Он занимается настройкой инструментов и систем, позволяющих намного чаще и качественней доносить обновления разработанных продуктов до клиентов. Основное преимущество Devops-инженера в том, что он совмещает несколько профессий: системного администратора, программиста, тестировщика и менеджера. Он контролирует отделы разработки и системного администрирования, автоматизирует выполнение их задач, внедряя различные программные инструменты.

DevOps-инженеры — это такие строители дорог, по которым бегут грузовики, нагруженные продуктами за авторством других инженеров

Основная цель DevOps-инженера – это синхронизация этапов разработки программного продукта: разработка, сборка, тестирование, развертывание, выпуск и доставка пользователям. Он отвечает за любую автоматизацию задач, связанных с настройкой и развертыванием приложений. На его плечи ложится и мониторинг программного обеспечения. Для этих целей он применяет различные системы управления конфигурациями, решения виртуализации и облачные инструменты для балансировки ресурсов.

DevOps-инженер занимается внедрением методологии DevOps.

Методология DevOps

 DevOps — это не какое-то конкретное направление деятельности, а профессиональная философия. Эта методология возникла в 2009 году и была призвана решить проблемы взаимодействия команд разработки и эксплуатации программных продуктов.

DevOps (англ. development and operations) — методология активного взаимодействия специалистов по разработке со специалистами по информационно-технологическому обслуживанию и взаимная интеграция их рабочих процессов для обеспечения качества продукта. Предназначена для эффективной организации, создания и обновления программных продуктов и услуг. В основе методологии — идея о том, что создание продукта и эксплуатация программного обеспечения взаимозависимы, и прививается она команде как культура создания продукта.

Методология DevOps — это набор практик, задача которых сократить время разработки программного обеспечения и ускорить выпуск обновлений. Для этого подхода недостаточно привлечь классических системных администраторов и разработчиков. Здесь нужны отдельные специалисты, способные настраивать железо, и адаптировать под него приложения. Например, программисты и тестировщики отвечают за Development, а администраторы — за Operations. И вот когда специалист вовлечен не только в непосредственную разработку, но также в процесс разворачивания продукта на хостинге или собственной серверной инфраструктуре и эксплуатации системы — это DevOps. Такая концепция – набор практик и правил, позволяющая ликвидировать разрыв между разработчиками сервиса и сотрудниками, которые отвечают за обслуживание и эксплуатацию приложения.

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

Ключевые слова для DevOps: гибкость, единство целей, ориентированность на продукт, общение участников, разрушение внутрикомандных барьеров, взаимное обучение, частые обновления

Участники команды работают сообща и приобретают целостное видение работы всей системы. Это способствует эффективному взаимодействию и улучшению качества продукта.

Основные принципы методологии DevOps:

  • Постоянное сотрудничество и общение: команда работает слаженно, понимая потребности и ожидания всех участников процесса.
  • Общая сквозная ответственность: каждый член команды движется к одной цели и в равной степени отвечает за проект от начала до конца, они работают слаженно и ищут способы облегчить задачи других.
  • Раннее (проактивное) решение проблем: задачи выполняются как можно раньше в жизненном цикле проекта, поэтому в случае потенциальных проблем задачи будут проактивно решены до наступления критического момента.
  • Автоматизация процессов: как можно большее число процедур разработки, тестирования, настройки и развертывания должно быть автоматизировано. Это позволяет специалистам избавиться от повторяющейся работы и сосредоточиться на других важных задачах, которые невозможно автоматизировать по своей природе.
  • Измерение KPI: оптимальной производительности можно добиться, отслеживая и оценивая различные показатели работы построенной системы.
  • Взаимопомощь и поддержка – ключевые особенности философии DevOps, подчеркивающие значимость сотрудничества. Обмен опытом между командами способствуют прозрачности и создает командную ценность.

 

Компании, внедрившие методологию DevOps, быстрее выводят новые сервисы на рынок, опережают конкурентов и улучшают бизнес-показатели.

Акцент на стратегических задачах. Методология DevOps позволяет автоматизировать большинство рутинных операций, таких как тестирование и запуск в продакшн. Команда разработки сфокусирована на стратегических задачах и не тратит время на рутину.

Технологический рост компании. В компаниях, практикующих DevOps, автоматизация разработки часто происходит за счет использования PaaS — платформ для решения различных задач, развернутых в облаке: системы управления базами данных, машинного обучения и аналитики больших данных. Такая платформа уже готова к работе, достаточно ее настроить под нужды компании.

Использование PaaS предполагает получение доступа к технологичным решениям за счет экспертизы провайдера. Любой сложный инструмент, внедренный на локальных сервисах, требует привлечения внешних консультантов, покупки железа, настройки и отладки. В облачных технологиях достаточно настроить инструмент под свой проект.

Быстрый выпуск продуктов на рынок. Автоматизация рутинных процессов позволяет выводить на рынок новые продукты и обновления раньше конкурентов.

Согласно исследовательской программе DORA (DevOps Research and Assessmen — американская исследовательская компания, специализирующаяся на вопросах цифровой трансформации) командам с низким уровнем внедрения DevOps на переход от тестовой версии до выкатки ПО в продакшн требуется от месяца до полугода, с высоким — от одного дня до недели.

Повышение лояльности клиентов. Автоматизация процессов снижает влияние человеческого фактора на конечный результат: система не может пропустить строку кода или забыть о тестах. По исследованиям DORA снижается количество релизов и обновлений, которые ухудшают обслуживание клиентов, сокращается время восстановления после инцидента, влияющего на пользователей.

Компании, внедрившие методологию DevOps, быстрее выводят на рынок новые продукты, сокращают затраты и повышают лояльность клиентов. Организациям нужна высокая скорость разработки; стабильность в процессе эксплуатации, при внесении изменений и масштабировании; минимизация затрат; возможность избежать найма дополнительных специалистов.

 

Задачи и функциональные обязанности DevOps-инженеров

Основная задача DevOps-инженера – наладить взаимодействие между разработчиками, системными администраторами, тестировщиками и менеджерами, внедрив в компанию методологию DevOps. Он выступает своего рода евангелистом для команды разработки: рассказывает, как правильно выстроить процессы, какие DevOps-практики и инструменты использовать.

DevOps-инженер — специалист, обеспечивающий автоматизацию процесса разработки продукта. В это понятие входит широкий спектр обязанностей:

  • Управление проектом: в некоторых случаях специалисты DevOps берут на себя ведущую роль в реализации продукта, следя за тем, чтобы все четко понимали цели, знали об основных сроках и находились в регулярном контакте.
  • Подготовка и подключение среды разработки продукта: инструментов анализа качества разработки, среды тестирования, инструментов доставки изменений из одной среды в другую (из среды разработки в среду тестирования, из среды тестирования в продуктивную среду), настройка взаимосвязей и окружения между всеми инструментами разработки и контроля для обеспечения непрерывно работающей автоматизированной линии сборки (создания) программного продукта — конвейера.
  • Мониторинг работоспособности всех сред и инструментов разработки (включая инструменты контроля качества разработки или передачи данных).
  • Автоматизация: сокращение временных затрат за счет автоматизации и создания полезных программных плагинов, которые уменьшат нагрузку на вашу команду разработчиков.
  • Оптимизация циклов выпуска: оценка временных потерь при текущей структуре циклов выпуска, устранение скрытых временных затрат, внедрение новых способов продвижения процесса.
  • Мониторинг и отчетность для обеспечения обратной связи с производством и сокращение временных затрат на обнаружение ошибок и их минимизацию.
  • Обеспечение безопасности всех процессов разработки продукта: автоматическая интеграция задач информационной безопасности во все этапы жизненного цикла разработки ПО (DevSecOps). DevSecOps внедряет процессы обеспечения кибербезопасности с первого этапа цикла разработки: проверка, аудит, сканирование и тестирование кода на безопасность проводятся на каждом этапе цикла разработки. Проблемы безопасности устраняются сразу же после их обнаружения. Это исключает появление дополнительных зависимостей. Внедрение технологий защиты на ранних этапах цикла снижает расходы на устранение проблем безопасности.

 

Знания и специальные компетенции DevOps-инженера

Специалист DevOps должен обладать широким кругозором и разбираться сразу в нескольких областях: разработка, операционные системы, облачные технологии, системы оркестрации. Он должен владеть большим количеством инструментов для организации эффективного взаимодействия с подразделениями и постоянно отслеживать новые технологии.

Инструменты управления. DevOps-инженер должен знать, как устроен весь процесс: от построения архитектуры до доставки приложения пользователям; чем занимаются разные участники команды, какие у них цели и задачи. Поэтому одной из важных профессиональных компетенций является владение инструментами управления, в особенности процессного управления.

Основы компьютерных сетей. DevOps-инженеры довольно часто занимаются конфигурацией сетевой инфраструктуры проекта. Это связано с тем, что все больше и больше проектов разворачиваются у облачных провайдеров. Крайне желательно знание основ компьютерных сетей, различных сетевых протоколов.

Разработка. Опытный DevOps-специалист владеет несколькими языками программирования, которые подходят для автоматизации: наиболее активно используются Python, Go и Bash.  Для автоматизации разработки DevOps-инженеру пишет скрипты и программы, умеет читать чуждой код, поэтому необходимо знание одного или нескольких языков программирования:

  • DevOps-инженер может написать скрипт, который поможет разработчикам установить код на сервер;
  • Созданные программы, могут моментально протестировать отзывчивость баз данных;
  • Приложения, созданные DevOps-инженером будет контролировать версионностью продукта;
  • DevOps-инженер всегда заметит ошибку в коде или проблему в разработке, которая может появиться на сервере.

Операционные системы. DevOps-инженер должен разбираться в средах для развертывания приложений и запуска кода. Опытный DevOps понимает общие принципы работы на любой операционной системе, но лучше всего разбирается в Windows или Linux.

Опытные инженеры примут решение при выборе системы, в которой целесообразно развернуть проект, определят инструменты и спрогнозируют потенциальные ошибки в процессе внедрения или эксплуатации.

Облачные технологии. Облачные технологии быстро развиваются. Знание инструментов дает возможность автоматизировать процесс тестирования кода и сборки приложений. Для переноса разработки в облачную среду и сокращение затрат на инфраструктуру DevOps-инженеру необходимо разбираться в решениях и инструментах, которые есть на облачных платформах: GCP, AWS и Azure.

В облаке для автоматизации задач управления инфраструктурой и упрощения реализации распространенных задач используется Hadoop и Spark.

С каждым годом рынок облачных технологий наполняется новыми решениями. Это позволяет автоматизировать операции тестирования кода, сборки приложений из компонентов, доставки обновлений до пользователей. Опытный DevOps разбирается в полностью облачных и в гибридных решениях.

Системы оркестрации и микросервисы. DevOps-инженер знает, как функционируют контейнеры и как построить систему. Для доставки и развертывания современных приложений используют контейнеры и микросервисы. Технология позволяет разбить приложение на много маленьких частей, разрабатывать и обновлять их независимо друг от друга.

Для управления контейнерами используют системы оркестрации. Одна из популярных сегодня — Kubernetes. Оркестратор контейнеров Kubernetes необходим как сервис, предоставляемый в облаке — для построения и автоматизации универсальных пайплайнов доставки и для управления приложениями.

DevOps-инженер должен досконально знать Docker и понимать, как работают контейнеры, как строить систему так, чтобы можно было отключать часть из них без последствий для общей системы в целом.

У микросервисной архитектуры есть много преимуществ — стабильность, возможность быстрого масштабирования, упрощение и повторные использования. DevOps понимает работу микросервисов, и может предупредить потенциальные проблемы.

Непрерывная интеграция и доставка (CI/CD). CI/CD — методология, которая позволяет автоматизировать интеграцию кода в репозитории, сборку, тестирование и запуск приложений в продакшн. Если интеграция непрерывна, то каждый раз при добавлении нового кода запускается автоматическое тестирование. В итоге приложение работает стабильнее.

Для непрерывной интеграции используется Jenkins. Аналогами являются, TeamCity, Buddy и Gitlab CI.

Управление версиями. Система контроля версий — программное обеспечение, которое нужно для отслеживания изменений внутреннего кода программы; также она позволяет хранить несколько версий кода. Без системы контроля версий сейчас нельзя представить ни одну командную разработку любого ПО.

Сейчас систем контроля версий много, они отличаются набором характеристик. На данный момент Git является самой популярной, считается «золотым стандартом», который используется практически везде.

Системы управления конфигурацией. Довольно часто случаются ситуации, когда DevOps-инженеру требуется развернуть большое количество одинаковых серверов. Вручную это делать долго, к тому же повышается риск возникновения ошибки. Системы управления конфигурацией позволяют DevOps-специалистам автоматизировать сложные задачи и управлять конфигурацией нескольких систем одновременно.

Самыми популярными на сегодняшний день инструментами являются Ansible, Chef, Puppet, Saltstack и т.д.

Infrastructure as Code. Модель «Инфраструктура как код» (IaC) является неотъемлемой частью работы DevOps-инженеров. С помощью IaC описывается гибкая, масштабируемая архитектура, которая, при желании, может быть легко изменена, дополнена либо уничтожена через код. Также можно быстро автоматизировать развертывание нового проекта и избавиться от зависимости железа или провайдеров. На данный момент самым популярным средством IaC является Terraform.

Английский язык. Знание английского довольно важно, поскольку почти вся документация и обучающие материалы по стэку DevOps предоставлены исключительно на английском языке. Кроме этого, будет нелишним иметь навыки делового общения и переписки на английском.

В работе DevOps-инженера очень много инструментов. И каждый из них разделяется на десятки подзадач, который может решить тот или иной инструмент. Только в процессе работы над проектом определяется пул востребованных инструментов и технологий.

Каждый день DevOps-инженер оперирует большим количеством инструментов. При выборе каждой технологии специалист обязан четко осознавать, как внедрение того или иного решения повлияет на процессы в команде. Такие сотрудники должны обладать широким кругозором: это очень востребованная в наше время профессия, и настоящие профи ценятся на вес золота.

 

Этапы работы DevOps-инженера

Планирование. На этом этапе DevOps-инженер принимает решение/помогает принимать решение о том, какую архитектуру будет использовать приложение; как оно будет масштабироваться; выбрает систему оркестрации.

Настройка. На втором этапе DevOps-инженер настраивает сервера, внедряет автоматизированную проверку, проверку среды и заносит код.

Автоматизация. DevOps занимается автоматизацией тестирования и решает задачи по процессу «разворачивания» разработанного продукта на собственной серверной инфраструктуре или на хостинге.

Обратная связь и улучшения. Обратная связь от пользователей очень важна. После релиза на основании полученной информации DevOps-инженер внедряет улучшения. Опытные специалисты стремятся к тому, чтобы пользователи не замечали этих улучшений, при этом процесс обновления был непрерывным.

Процессы. Одновременно DevOps занимается решением задач, которые возникают в работе и помогает наладить систему работы команд: разработчиков, QA, системных администраторов и менеджеров.

 

Роль DevOps-инженера в команде

Главная задача DevOps-инженера — минимизировать взаимодействие между командами разработки и эксплуатации. DevOps-инженер — это связующее звено между инфраструктурой и разработчиками, упрощающее работу каждой из команд. DevOps-инженер понимает и специфику разработки, и специфику администрирования и тестирования. Основная его задача — автоматизация и упрощение процессов выпуска продукта. Очень часто DevOps-инженерами становятся бывшие системные администраторы, которым небезразличны боли разработчиков.

Роль DevOps в проекте основополагающая. Проект и все, что с ним связано, базируются на DevOps-процессах. DevOps — это связать вместе разные части всей экосистемы (Dev, QA, Ops, Sec) и автоматизировано обеспечить SDLC.

Разработчик пишет код, тестировщик — тесты, системный администратор занимается эксплуатацией всего, а DevOps-инженер сводит между собой результаты их работы. Он создает волшебную кнопку, на которую кликает разработчик после написания очередного куска кода, и далее написанный код попадает в тестовую среду, проходит все стадии тестирования и уходит в продакшн.

Основываясь на DevOps-подходе и инженерах, которые его обеспечивают, проект получает гибкость, автоматизацию, непрерывность и отказоустойчивость, управление костами, ресурсами и т.д.

К сожалению, реалии очень сильно отличается от ожиданий. Многие проекты стартуют с момента, где пропущено планирование, имеются архитектурные ошибки; про автоматизацию вспомнили в момент, когда все проекты встали. Ключевой навык DevOps-инженера — умение разобраться во всех этих проблемах и приложить свои умения и знания для успешной реализации проекта.

Следует отметить, что на рынке кадров часто происходит подмена понятий. ИТ-директор должен обладать достаточной квалификацией, чтобы определить кто именно необходим для выполнения поставленной задачи. К сожалению, нередко системные администраторы называют себя DevOps-инженерами. Либо бизнес ищет DevOps-инженера на функционал системного инженера.

В зависимости от целей организации, специфики проекта направления DevOps тоже могу изменяться. Например, где-то требуется все автоматизировать, а где-то выполнять функции разработчика с опытом системного администрирования.

 

Нужен или не нужен DevOps-инженер?

В большинстве случаев Devops-инженер — это роль, которую на себя может взять любой член команды. В крупных компаниях, где за счет создания выделенной роли можно сэкономить, Devops-инженеры проектируют и поддерживают системы доставки изменений для многих команд, стандартизируя эти процессы.

Вышеперечисленные этапы работы происходят в проектах, которые разрабатываются с нуля. Но бывают и такие случаи, когда инженер приходит работать в уже запущенный проект, где разработчики приступили к созданию продукта без планирования и выбора архитектуры. А когда проект встал, пригласили DevOPS-инженера для решения проблем и автоматизации работы.

DevOps-инженеры могут принести пользу любой организации, чья деятельность связана с разработкой приложений или управлением большим количеством серверов. DevOps-инженеров нанимают ИТ-гиганты вроде Amazon, Adobe и Facebook. Еще они работают на Netflix, Walmart и Etsy.

А вот в стартапы очень редко ищут DevOps-инженеров, так как их основной задачей является выпуск MVP, чтобы проверить идею. Небольшие организации самостоятельно справляются с решением вопросов между отделом разработки и эксплуатации.

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

 

Заработные платы DevOps-инженера

В зарубежных организациях DevOps-инженеры зарабатывают больше всех в отрасли.  Их средний заработок составляет от 100 до 125 тысяч долларов в год.

Российские компании готовы платить DevOps-специалистам от 80 000 до 120 000 рублей начинающим специалистам и от 150 000 до 200 000 рублей специалистам с опытом от 3-х лет. В зависимости от региона заработные платы могут изменятся, но не будут сильно отличаться от обозначенных сумм.

 

Карьера DevOps-инженера

DevOps-инженер должен иметь обширный технический кругозор, ему необходимо постоянно изучать новые инструменты и технологии.

Без предварительной подготовки войти в профессию будет практически невозможно: не получится выучиться на курсах с нуля и стать начинающим специалистом. Прежде всего, необходим технический бэкграунд:

  • Опыт работы системным администратором, специалистом по эксплуатации или тестированию от года.
  • Навыки работы с сетевыми технологиями: установка, настройка и управление локальными и глобальными сетями.
  • Опыт написания скриптов, понимание принципов объектно-ориентированного программирования, знание общего цикла разработки продукта.
  • Знание технического английского языка: уметь читать документацию и интерфейсы.

 

Для дальнейшего развития необходимо:

 

  • Прохождение специализированных курсов по методологии DevOps (от 6-ти месяцев).
  • Поиск компании, у которой есть постоянная потребность в автоматизации и внедрении. Можно рассмотреть также организацию, которая продает облачные решения или является разработчиком больших проектов.
  • Активное участие в проектах на стыке эксплуатации и разработки от 2х лет.

Следующий шаг в развитии карьеры DevOps-инженера – это системный архитектор, CTO или CIO.

 

Заключение

DevOps-инженер сочетает в себе навыки сразу нескольких профессий. Он всегда готов предложить оптимальное решение в той части проекта, где другие ИТ-специалисты его даже не предполагают. Роль DevOps-инженера очень значимая и требует огромного объёма знаний. Как и в любой ИТ-профессии, требуется приложить много усилий, чтобы стать экспертом в области DevOps.

Дополнительные навыки и понимание всего процесса сделают таких специалистов востребованными сотрудниками. Благодаря своей кросфункциональности DevOps-инженеры могут выбрать для себя совершенно разные пути для дальнейшего развития.

На DevOps-инженерах лежит огромная ответственность и им приходится постоянно сталкиваться с различными форс-мажорами, в которых необходимо быстро принимать решение. Поэтому, одновременно с необходимостью развивать hard skills, DevOps-инженер постоянно прокачивает и soft skills.

Наталья Карташева,
Эксперт центра