Вышла
моя новая статья в журнале TProger. В ней я рассказал о роли DevOps-инженера,
чего мы добились в нашей компании, используя принципы DevOps, и немного про
инструментарий. Только личный опыт.
Ключевая
мысль статьи:
«В отличие от классических сисадминов мы не работаем по шаблонам и инструкциям 24×7×365, мы не техподдержка, в наши обязанности не входят поддержка «железной» части инфраструктуры и круглосуточное обеспечение работоспособности серверов. Я предлагаю считать DevOps-инженеров современными инженерами-технологами в производстве ПО. Такие специалисты квалифицированно решают не только задачи своей роли, но и видят весь производственный конвейер целиком, понимают, как результаты их работы будут использованы далее и интегрированы в общую производственную цепочку.»
Говоря о DevOps-инженерах, важно охватить весь спектр решаемых ими
задач. Вообще сам термин «DevOps-инженер» следует использовать только с
привязкой к конкретной предметной области, иначе получится как с
программистами: говорят «он работает программистом», а подразумевают под этим и
веб-дизaйнера, и специалиста по базам данных, и программиста C++. Для меня
DevOps — это набор методологий, лучших практик, технологий и инструментов
разработки ПО. Инженер, работающий по принципам DevOps, может обладать широким
кругозором в различных направлениях: continuous integration, continuous
delivery, build, deploy, test, SCM,
infrastructure, monitoring, но может быть и узкоспециализированным
специалистом, например только в области мониторинга или сбора телеметрии от
продуктов.
О роли DevOps-инженера
Роль DevOps-инженера сильно зависит от специфики
задач, решаемых конкретной командой. Если команда занимается разработкой
веб-приложений, то скорее всего, ей потребуется инженер по деплою продуктов на
staging- и production-серверы. Если команда — это специалисты по тестированию
ПО, то DevOps-инженер может заниматься у них инфраструктурными задачами,
например помогать с развертыванием виртуальных стендов для тестирования и
доставкой тестируемого приложения и тестов на эти стенды. Если это SCM-команда,
занимающаяся развертыванием ПО в инфраструктуре конечного заказчика,
DevOps-инженеры могут взять на себя задачи, связанные с доставкой компонентов
продукта до серверов заказчика, а также заняться разработкой сценариев
развертывания ПО, мониторингом продукта и сбором телеметрии.
Для
примера, специфика работы нашей компании, вендора в области инновационных
решений информационной безопасности, накладывает на наш отдел автоматизации
(неформально называемый DevOps-отделом) обязанность поддерживать работу всего
конвейера производства ПО и сопутствующую инфраструктуру, начиная от сборки
отдельных компонентов и инсталляторов продуктов до их отправки на тестирование
и доставки на серверы обновлений и затем в инфраструктуру
заказчиков. Несмотря на огромный объем технических задач, с ними
справляются полтора десятка человек, при этом количество разработчиков в
R&D, с которыми мы работаем, — несколько сотен.
DevOps
в современном IT уже давно выделился в самостоятельную инженерную дисциплину —
очень динамичную и технологичную. Ключевым принципом для DevOps-инженеров
является принцип DevOps as a service. Мы должны оперативно приносить новые
технологии нашим разработчикам и тестировщикам и поддерживать работу старых,
проверенных временем сервисов. Кроме того, мы делаем труд разработчиков более
комфортным, эффективным и продуктивным. Также мы разрабатываем внутренние
вспомогательные инструменты, регламентируем и автоматизируем процессы
разработки, сохраняем и распространяем технологические знания внутри компании,
проводим технические воркшопы, митапы и делаем еще много всего полезного.
В отличие от классических сисадминов мы не работаем по шаблонам и инструкциям 24×7×365, мы не техподдержка, в наши обязанности не входят поддержка «железной» части инфраструктуры и круглосуточное обеспечение работоспособности серверов. Я предлагаю считать DevOps-инженеров современными инженерами-технологами в производстве ПО. Такие специалисты квалифицированно решают не только задачи своей роли, но и видят весь производственный конвейер целиком, понимают, как результаты их работы будут использованы далее и интегрированы в общую производственную цепочку.
Чего мы добились, используя принципы DevOps
Основное, чего мы добились для бизнеса, работая по
принципам DevOps, — это тиражируемость технологических решений. Все решения, которые мы предоставляем, типовые, масштабируемые и
построены на шаблонах. Для всех проектов общая концепция процесса CI/CD
остается неизменной: выполняются коммит в git и
автоматическая сборка (building) — деплой на тестовые серверы (deploying) —
функциональное и прочие виды автотестирования (testing) — продвижение сборки в
стабильные (promoting) — публикация на GUS (publishing) — распространение через
FUS на инфраструктуре заказчика (delivering) — установка или обновление
продукта на серверах (installing & updating).
IDEF0-схема типового процесса CI/CD
На каждом из этапов наш отдел помогает разработчикам и тестировщикам решить конкретные технические задачи:
- обеспечить хранение кода в системе
GitLab (выделить им проект);
- разработать сборочную
конфигурацию на базе одного из типовых шаблонов и обеспечить хранение
собранных артефактов в системе Artifactory;
- реализовать конфигурации для
деплоя артефактов на серверах тестировщиков и помочь им с подготовкой
тестовых конфигураций;
- в случае успешного
тестирования — продвинуть сборку, то есть переместить ее в хранилище
протестированных артефактов в Artifactory, для чего также создается
специальная конфигурация;
- при необходимости опубликовать
сборку на корпоративном сервере Global Update, откуда она будет автоматически
распространена на FUS-серверы для заказчиков;
- при помощи скриптов на базе
SaltStack развернуть сборку на конкретном сервере.
Каждый
этап контролируется через систему мониторинга Zabbix. Когда возникает сбой,
разработчики пишут нам заявку, мы локализуем и исправляем проблему.
О
первых шагах нашей команды в DevOps, о том, с какими проблемами мы столкнулись,
как выстраивали процесс CI/CD и к чему пришли в итоге, можно почитать в статьях
на Хабре:
·
Миссия выполнима: как развить DevOps в компании со множеством проектов,
·
Личный опыт: как выглядит наша система Continuous Integration,
· Автоматизация процессов разработки: как мы в Positive Technologies внедряли идеи DevOps.
Если они вас заинтересуют как инженеров, можете прочитать подробнее, как мы выделяли и классифицировали типовые шаги и этапы производственного конвейера в нашей компании, а затем пришли к технологической карте производственного процесса — простому, но мощному аналитическому инструменту для управления проектами. Об этом написано в статье «Управление хаосом: наводим порядок с помощью технологической карты». Если вы тимлид команды автоматизаторов, то вам также может быть интересна статья «Личный опыт: как выстроить карьерный рост в отделе DevOps».
Какие инструменты DevOps-инженеры используют в работе
Применяемый DevOps-инженерами инструментарий должен
подбираться в зависимости от решаемых задач, не стоит жестко их ограничивать.
Кроме того, любой набор инструментов автоматизации сейчас устаревает слишком
быстро и за пару лет может полностью измениться. В этом плане мне нравятся
гибкие roadmaps развития в профессии, которые предлагаются opensource-сообществом,
в том числе с перечислением актуальных на данный момент инструментов. Например,
есть roadmap
для DevOps-инженеров и roadmap
для разработчиков.
Если
сказать чуть более абстрактно, без привязки к решаемым задачам, то
DevOps-инженер должен владеть как минимум одним высокоуровневым языком
программирования (Python, Java, Go, C++, C# или любым
другим), понимать основы разработки и тестирования ПО. Понимать, как работают
операционные системы Windows и Linux и их основные концепции: треды и процессы,
разграничение доступа, сокеты, модель OSI, устройства ввода-вывода, память
и устройства хранения данных; понимать, как работает виртуализация. Также
потребуются навыки работы с терминалом ОС, умение писать batch- и bash-скрипты.
Будет совсем не лишним знакомство с направлением infrastructure as code
(инфраструктура как код): контейнеризацией (например, с помощью Docker и Docker Compose),
написанием сценариев развертывания окружения (например, посредством Salt или
Ansible), оркестрацией (Kubernetes), а также со всем, что касается мониторинга
инфраструктуры (например, Zabbix, Grafana или Prometheus). Для продуктовой
разработки также очень важны навыки работы с системами CI/CD, например
TeamCity, Gitlab CI, Travis CI, Jenkins и Azure DevOps. Кроме того, важно
умение работать с виртуальной инфраструктурой и облаками, например с vSphere,
Azure, AWS или Google Cloud.
Важно
не останавливаться на достигнутом: современные технологии требуют постоянного
совершенствования навыков и постоянного изучения новых подходов к решению
инженерных задач.
Автор: Тимур
Гильмуллин, заместитель руководителя отдела технологий и процессов разработки Positive
Technologies
Оригинал статьи в журнале TProger: https://tproger.ru/articles/devops-among-developers/