Хабрахабр

[Перевод] Руководство для чайников: создание цепочек DevOps с помощью инструментов с открытым исходным кодом


Создание первой цепочки DevOps за пять шагов для новичков.

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

Мое знакомство с DevOps

Грег Лавендер, наш техдиректор по облачной архитектуре и инфраструктуре, посоветовал мне книгу Проект «Феникс». Когда-то я работал с облаками в Citi Group и разрабатывал веб-приложение IaaS, чтобы управлять облачной инфраструктурой Citi, но мне всегда было интересно, как можно оптимизировать цепочку разработки и улучшить культуру среди разработчиков. Она прекрасно объясняет принципы DevOps, при этом читается, как роман.

В таблице на обороте показано, как часто компании выкатывают новые версии:

А все просто: они поняли, как создать почти идеальную цепочку DevOps. Как Amazon, Google и Netflix успевают столько выкатывать?

Тогда у моей команды были разные среды, но поставку на сервер разработки мы делали вручную. У нас в Citi все было совсем не так, пока мы не перешли на DevOps. При одновременной попытке поставки сервер “падал”, а нам приходилось каждый раз “болезненно” договариваться между собой. У всех разработчиков был доступ только к одному серверу разработки на базе IBM WebSphere Application Server Community Edition. А еще у нас было недостаточное покрытие кода тестами, трудоемкий ручной процесс поставки и никакой возможности отслеживать поставку кода с помощью по некоторой задаче или требованию клиента.

Мы решили вместе создать первую цепочку DevOps — он настроил виртуальную машину и сервер приложений Tomcat, а я занялся Jenkins, интеграцией с Atlassian Jira и BitBucket, а также и покрытием кода тестами. Было понятно, что нужно срочно что-то делать, и я нашел коллегу-единомышленника. И почти все инструменты, которыми мы строили цепочку DevOps, были открытым исходным кодом. Проект был успешным: мы полностью автоматизировали цепочку разработки, добились почти 100% бесперебойной работы сервера разработки, могли отслеживать и улучшать покрытие кода тестами, а ветку Git можно было привязать к поставке и задаче Jira.

Но у нас все получилось. По факту, цепочка была упрощенной, ведь мы даже не применяли расширенные конфигурации с помощью Jenkins или Ansible. Возможно, это следствие принципа Парето (он же правило 80/20).

Краткое описание цепочки DevOps и CI/CD

DevOps, как и Agile, включает в себя разные дисциплины. У DevOps есть разные определения. Но большинство согласятся с следующим определением: DevOps — это метод, или жизненный цикл, разработки ПО, главный принцип которого — создание культуры, где разработчики и другие сотрудники “на одной волне”, ручной труд автоматизирован, каждый занимаются тем, что лучше всего умеет, возрастает частота поставок, повышается продуктивность работы, увеличивается гибкость.

Самым важным из них является непрерывная интеграция и непрерывная поставка (CI/CD). И хотя одних только инструментов недостаточно для создания среды DevOps, без них не обойтись. В цепочке для каждого окружения есть разные этапы (например, DEV (разработка), INT (интеграция), TST (тестирование), QA (контроль качества), UAT (приемочное тестирование пользователями), STG (подготовка), PROD (использование)), ручные задачи автоматизированы, разработчики могут делать качественный код, делают его поставку и могут легко перестраиваться.

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

Перейдем к делу.

Шаг 1: Платформа CI/CD

Jenkins — это открытый инструмент CI/CD написанный на Java с лицензией MIT, с которого началась популяризация движения DevOps и который де-факто стал стандартом для CI\CD. Первым делом вам нужен инструмент CI/CD.

Представьте, что у вас есть волшебный пульт управления для самых разных сервисов и инструментов. А что такое Jenkins? Сам по себе инструмент CI/CD, типа Jenkins, бесполезен, но с разными инструментами и сервисами он становится всемогущим.

Кроме Jenkins есть множество других открытых инструментов, выбирайте любой.

Вот как выглядит процесс DevOps с инструментом CI/CD

Перейдем к следующему шагу. У вас в localhost есть инструмент CI/CD, но делать пока особо нечего.

Шаг 2: управление версиями

Зачем нужен контроль версий? Лучший (и, пожалуй, самый простой) способ проверить магию инструмента CI/CD — интегрировать его с инструментом контроля версий (source control management, SCM). Вы пишете его на Java, Python, C++, Go, Ruby, JavaScript или на любом другом языке, коих вагон и маленькая тележка. Допустим вы делаете приложение. Поначалу, особенно если вы работаете в одиночку, можно сохранять все в локальный каталог. То, что вы пишете, называется исходным кодом. А еще вам нужно как-то восстанавливать предыдущие версии без использования резервных копий и применения метода copy-paste для файлов с кодом. Но когда проект разрастается и к нему присоединяется больше людей, вам нужен способ делиться изменениями в коде, но при этом избежать конфликтов при слияниях изменений.

SCM сохраняет код в репозиториях, управляет его версиями и координирует его среди разработчиков. И тут без SCM никуда.

Я советую использовать именно его, но есть и другие варианты. Инструментов SCM немало, но стандартом де-факто заслуженно стал Git.

Вот как выглядит пайплайн DevOps после добавления SCM.

Неплохо? Инструмент CI/CD может автоматизировать загрузку и выгрузку исходного кода и совместную работу в команде. Но как теперь из этого сделать рабочее приложение, любимое миллиардами пользователей?

Шаг 3: инструмент автоматизации сборки

Вы можете выгружать код и фиксировать изменения в системе контроля версий, а также пригласить друзей поработать с вами. Все идет как надо. Чтобы это было веб-приложение, его нужно скомпилировать и поместить в пакет для поставки или запустить как исполняемый файл. Но приложения у вас пока нет. (Интерпретируемый язык программирования, вроде JavaScript или PHP, компилировать не надо.)

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

Теперь вставим файлы конфигурации инструмента автоматизации сборки в систему контроля версий, чтобы инструмент CI/CD их собрал. Превосходно!

Но куда теперь все это выкатить? Вроде, все нормально.

Шаг 4: сервер веб-приложений

Чтобы приложение действительно приносило пользу, у него должен быть какой-то сервис или интерфейс, но вам нужно где-то это все разместить. Итак, у вас есть запакованный файл, который можно исполнять или выкатывать.

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

Есть несколько открытых серверов веб-приложений.

Отличная работа! У нас уже получился почти рабочая цепочка DevOps.

В принципе, здесь можно остановиться, дальше вы справитесь сами, но стоит еще рассказать о качестве кода.

Шаг 5: Тестовое покрытие

Для этой цели есть много открытых инструментов, которые не только протестируют код, а еще и посоветуют, как его улучшить. Тестирование отнимает много времени и сил, но лучше сразу найти ошибки и улучшить код, чтобы порадовать конечных пользователей. Большинство инструментов CI/CD могут подключаться к этим инструментам и автоматизирвать процесс.

Тестирование разделено на две части: фреймворки тестирования, чтобы писать и выполнять тесты, и инструменты с подсказками по повышению качества кода.

Фреймворки тестирования

Инструменты с подсказками по качеству

Большинство этих инструментов и фреймворков написаны для Java, Python и JavaScript, потому что C++ и C# — проприетарные (хотя у GCC открытый исходный код).

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

Дополнительные шаги

Контейнеры

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

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

Для контейнеров обычно берут Docker и Kubernetes, хотя есть и другие варианты.

Почитайте статьи о Docker и Kubernetes на Opensource.com:

Инструменты автоматизации промежуточного ПО

Например, использовать инструменты «инфраструктура как код» (IaC), которые еще называются инструментами автоматизации промежуточного ПО. Наша цепочка DevOps ориентирована на совместную сборку и поставку приложения, но с инструментами DevOps можно делать и другие интересные штуки. Например, инструмент автоматизации может брать приложения (сервер веб-приложений, базу данных, инструменты мониторинга) с правильными конфигурациями и выкатывать их на сервер приложений. Эти инструменты помогают автоматизировать установку, управление и другие задачи для промежуточного ПО.

Вот несколько вариантов открытых инструментов автоматизации промежуточного ПО:

Подробности в статьях на Opensource.com:

И что теперь?

Цепочка DevOps может гораздо больше. Это только верхушка айсберга. Не забудьте про открытые инструменты коммуникации для эффективной совместной работы. Начните с инструмента CI/CD и узнайте, что еще можно автоматизировать, чтобы упростить себе работу.

Вот еще несколько хороших статей о DevOps для начинающих:

А еще можно интегрировать DevOps с открытыми инструментами для agile:

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть