Инструменты в повседневной работе DevOps-инженера
Эксперт рассказывает об инструментах, которые полезно знать DevOps-инженеру: от закостенелых Jenkins и Splunk, до современных Loki и Lens.
Александр Селезнев
Тренер Luxoft Training, специалист в области организации DevOps-процесса разработки
Важные инструменты, которые должен знать DevOps-инженер: от закостенелых Jenkins и Splunk, до современных Loki и Lens.
Git
Система управления исходным кодом, которой пользуются, пожалуй, вся индустрия. Это стандарт трекинга исходного кода. Git — единственная поддерживает все современные паттерны разработки и обязательна для изучения DevOps-инженеру.
Gitlab
Если вы работаете с молодой командой, то я бы посоветовал изучить Gitlab. Система поддерживает полный цикл разработки, включающий управление исходным кодом на Git, Continuous integration, Continuous Delivery, issue tracking.
На одном Gitlab можно полностью вести разработку «мерджиться», «деплоиться» и прочее. Однако система навязывает определенный workflow, который не всегда подходит проекту. Это возможно обойти, но редко результат получается хорошим.
Jenkins
Старожил на поприще систем автоматизации сегодня чаще используется в уже «вставших на ноги» компаниях. Jenkins разрабатывался, как инструмент непрерывной интеграции, но развился до системы способной запустить ракеты в космос благодаря плагинам.
Это его достоинство и недостаток. Из-за обилия необходимых плагинов система становится тяжёлой. Постоянные обновления и риски, что все разрушится, а также отвратительный UI могут превратить работу в ад. Сегодня немногие новые команды выбирают Jenkins, но в проектах около пятилетней давности система встречается часто.
Jira
Решения Atlassian уже стали определенным индустриальным стандартом. Работая с крупными заказчиками, вы, скорее всего, будете использовать именно Jira. Ежедневно в системе я завожу тикеты, трекаю время на выполнение задач, состояние спринтов, создаю release notes и решаю другие задачи. Несмотря на ряд аналогов, плюс Jira — интеграция с другими системами Atlassian, например Confluence.
Confluence
Система динамического управления контентом. В некотором роде — это «вики» с визуальным редактором страниц. Здесь я веду проектную документацию, трекаю требования к системе, заметки, состояния, создаю страницы по описанию билдов.
Docker
Система контейнеризации и одна из основных технологий для DevOps-инженера. ПО для автоматизации развёртывания и изоляции приложений. Мы используем для сборки и запуска контейнеров в DEV окружениях.
Kubernetes
Платформа для автоматизации управления контейнерами приложений. Kubernetes стал стандартом, обойдя немногочисленных конкурентов, типа Rancher. Система предоставляет механизмы решения всех стандартных задач IT по управлению приложениями. Управляется декларативно — оператор передает контроллеру Kubernetes желаемое состояние окружения, и тот сам выполняет все необходимые действия для его достижения.
Lens
Графический интерфейс для управления и мониторинга Kubernetes кластеров. Также известен, как GUI для Kubernetes, где возможно увидеть все их сущности, включая пользовательские ресурсы. Хоть это и не обязательный инструмент для DevOps-инженера, но я рекомендую его использовать. Здесь много разных крутых возможностей. Например, доступ к приватным кластерам через собственный прокси.
Prometheus
База данных для сбора метрик в реальном времени. Использует модель HTTP-запроса и «ходит» в URL приложений для сбора данных.
Grafana
Dashboard-решение для визуализации полученных данных. Мы используем Grafana в связке с Prometheus. Система демонстрирует графики, таблицы, и используется в современных стеках больших решений.
Loki
Молодая система сбора логов с приложений, вдохновленная Prometheus. До Loki логи всегда хранились, как текст в файлах либо индексировались в системе вроде Elasticsearch. Это приводило к большому весу на диске и нагрузке при поиске и агрегации. Loki индексирует метадату, позволяя хранить логи в достаточно медленном и дешёвом хранилище вроде Object Storage (AWS S3 etc), так как для поиска и агрегации не используется весь текст. Они занимают меньше места и поиск происходит быстрее по стандартизированным лейблам.
Splunk
Большая неповоротливая система по мониторингу всех данных. Старая, мощная но малопроизводительная. Крупные компании не хотят изменять Splunk с Prometheus и Grafana. Отчасти из-за платной поддержки. Поэтому, DevOps-инженеру в большой организации придется научиться работать с Splunk.
Terraform
Система управления инфраструктурой с помощью API, облачными провайдерами, приватными облаками. Terraform стала первой, позволившей нам работать с разными облачными провайдерами. Для описания и применения окружения в коде не нужно идти в консоль. Система сама создает необходимые сети, кластера и так далее.
Большая часть из названных инструментов — обязательна для DevOps-инженера. Однако единый список для каждого разработчика составить невозможно. Выбор инструментов зависит от выбора языка. Поэтому умение использовать инструменты — только часть необходимых навыков.
DevOps-инженеру нужно постоянно автоматизировать шаги. Вам понадобится «клей», который бы связывал все инструменты в общий пайплайн. Для этого помимо инструментов необходимо изучить сценарные языки — Python, JavaScript, Ruby, Go, Bash и другие.
Айтишнику на заметку: 10 крутых инструментов для DevOps

Работа DevOps-специалиста трудна и многозадачна. К счастью, ее можно (и даже нужно) автоматизировать. Сегодня мы расскажем о 10-ти инструментах, которые облегчат тяжелые трудовые будни девопса.

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

Такой репозиторий (или хранилище артефактов) служит 3 целям: 1) держать под рукой копию maven-центра для сокращения времени загрузки фреймворков; 2) хранить файлы, которые будут использоваться в качестве зависимостей; 3) собрать в одном месте разные релизы. Отличный инструмент для Continuous Integration.

Jenkins — серверная система для CI/CD
Программа автоматически собирает и тестирует проект каждый раз, когда вы обновляете код в центральном репозитории. А еще помогает выстраивать процессы непрерывной доставки.
Gradle — система автоматической сборки
Идеально подходит для многомодульных сборок, чем многим нравится больше, чем старый-добрый Maven. Поддерживает инкрементальную сборку, при которой система сама определяет, какие компоненты изменились и требуют перезапуска.

Ansible – система автоматического управления конфигурациями
Еще Ansible автоматизирует запуск IT-инфраструктуры (в облаке или контейнере), деплой приложения и многое-многое другое. Работает с так называемыми плейбуками, настраивать которые гораздо проще, чем обычные модули конфигурации.

Librarian – система управления кукбуками
Палочка-выручалочка для работы с кукбуками, в которых прописаны зависимости. Даже при работе со столь популярным Chef зависимости приходится добавлять в проект вручную. Librarian же делает это в автоматическом режиме.

Selenium – инструмент для тестирования веб-приложений
Удобная программа, заменяющая команду QA-тестировщиков. Хорошее решение, если нужно протестировать с десяток компонентов или быстро оценить 100500 параметров работы веб приложения.
Takipi — инструмент для поиска багов
Широко известная в узких кругах программа, которая проверяет приложение на наличие ошибок, соответствие спецификациям, проблемы с автодеплоем и редеплоем. Очень полезный инструмент для контрольной оценки качества продукта перед продакшеном.

New Relic – сервис для мониторинга и обратной связи
Еще одна малоизвестная, но мощная программа для проверки работоспособности приложений (в том числе мобильных). Заменяет ручное нагрузочное тестирование, предоставляет развернутую аналитику, обеспечивает постоянный фидбэк с партнерами и конечными пользователями.

Хорошая программа для сбора метрик и мониторинга запущенного приложения. Для его работы нужны экспортёры, которые подключаться к prometheus, и заниматься непосредственно определением необходимых метрик. Некоторые экспортёры необходимо также дополнительно настраивать.
Помните: правильно выбранные инструменты DevOps не только автоматизируют работу с программным продуктом, но и повышают его качество, сокращают время релиза и дают вам фору перед конкурентами. Но если у вас нет времени, ресурсов (или специалистов), чтобы с ними разобраться, DevOps всегда можно передать на аутсорсинг.
Инструменты DevOps

Visitors have accessed this post 6216 times.
Один из основных принципов DevOps – автоматизируйте все. Конечно, для автоматизации того широкого круга процессов, которые затрагивает методология, — разработка, тестирование, внедрение, внесение изменений – нужны эффективные инструменты. В этой статье мы рассмотрим, какие инструменты DevOps используются на разных этапах работы DevOps-инженера. Надо отметить, что этот перечень не является чем-то статичным, отнюдь. Ведь путь прогресса неотвратим – поэтому постоянно появляются новые методики и разрабатываются новые инструменты.
Планирование и оценка
Основной и самый широко используемый инструмент DevOps для планирования и оценки – это JIRA. Он позволяет отслеживать проблемы и ошибки и налаживать взаимодействие пользователей в рамках проекта.
Этот инструмент управления жизненным циклом приложений был разработан компанией Atlassian, поэтому он легко интегрируется с другими продуктами компании, например, с Bitbucket. Jira поддерживает основные типы баз данных (MySQL, Microsoft SQL Server, Oracle и др.) и веб-браузеров (Google Chrome, Internet Explorer, Firefox).
К числу преимуществ системы можно отнести простоту ее развертывания — как веб-приложения в Linux или Windows — и интуитивно понятный интерфейс. JIRA подходит для компаний любого масштаба – от маленьких до крупных. Кроме того, благодаря ее функциональной совместимости, можно «допилить» систему под свои потребности и создать на ее основе платформу любого уровня, даже в рамках корпорации.
Основным элементом учета в JIRA является задача или тикет. Именно в ней определяется проект, его содержание, приоритеты и компоненты. В тикет можно вносить изменения или менять статус. Все изменения сохраняются в журнале. Для каждого проекта можно определить свой тип задачи, статусы и workflow.
Контроль версий
Для контроля версий используются системы Git, Mercurial и хостинги GitHub / BitBucket / GitLab.
Git — это распределенная система контроля версий. Она позволяет обеспечить скорость разработки, при этом сохраняя целостность данных за счет поддержки распределенных рабочих процессов.
Это означает, что система сохраняет все изменения, которые вносятся в файлы, в виде снимков, так называемых коммитов. Благодаря этому, несколько человек могут одновременно работать в одном репозитории и вносить изменения. Так как коммиты сохраняются на разных серверах, в случае сбоя можно легко восстановить код или «откатить» систему до нужного состояния.
Mercurial – это консольная программа для распределенного управления версиями. Предназначена для работы прежде всего с очень объемными репозиториями.
Поддерживая весь основной функционал системы контроля версий (сохранение изменений, возможность распределенной работы), Mercurial предлагает еще и возможность полностью децентрализованной работы, без единого основного репозитория кода. Еще в числе важных особенностей Mercurial – возможности ведения нескольких веток проекта и копирования изменений между ними (ветвление), а также функционал, позволяющий проводить слияние репозиториев.
GitHub — платформа для размещения кода с возможностями контроля версий и совместной работы. Включает все функции Git и ряд дополнительных возможностей — контроль доступа, совместная работа, отслеживание ошибок, создание функций и запросов, управление задачами.
Bitbucket — веб-хостинговая платформа, разработка Atlassian, что позволяет просто интегрировать ее с другими продуктами Atlassian. Также легко интегрируется с такими инструментами DevOps, как Jenkins и Bamboo.
Bitbucket по своему функционалу аналогичен GitHub, также реализует функционал проверки кода, отслеживания изменений, предлагает возможности для совместной распределенной разработки и управление правами доступа на уровне отдельных ветвей проекта. Основан на системах контроля версий Mercurial и Git. База пользователей Bitbucket меньше, чем у GitHub. Но у него есть одно существенное преимущество – возможность бесплатного размещения приватных репозиториев с ограничением на размер команды до пяти человек. Поэтому Bitbucket предпочитают использовать небольшие команды разработки
GitLab — основной конкурент платформы GitHub, которая появилась на 3 года раньше (в 2008 году) и завоевала наибольшую популярность среди хостингов репозиториев. Но сегодня явно видна тенденция перехода команд разработки на GitLab, как более функциональное решение.
GitLab – это система управления репозиториями для Git с открытым исходным кодом. В ней реализованы собственная вики, отслеживание ошибок, CI/CD pipelines, функционал API, доски задач, возможность комментариев и ряд других функций. GitLab позволяет управлять публичными и приватными репозиториями, пользователями и их группами, назначать права доступа к репозиториям, разворачивать и анализировать код. Система может быть интегрирована с разными CI-системами (например, с Jenkins) или можно процесс непрерывной интеграции кода встроенными средствами GitLab.
Контейнеризация
Контейнеризация стала отличной альтернативой аппаратной виртуализации. Она позволила существенно сэкономить ресурсы и увеличить эффективность процессов разработки и эксплуатации приложений. С ней стало возможным упаковать приложение сразу со средой запуска, отсекая проблему зависимостей в различных окружениях.
Популярные DevOps-инструменты контейнеризации — (Docker, rkt, CRI-O) и системы оркестрации (Swarm, Nomad by HashiCorp, Kubernetes). Остановимся кратко на каждом из них.
Docker – это удобный интерфейс для работы с контейнерами. Его можно использовать на всех этапах работы с приложениями — при разработке, тестировании, ревью и эксплуатации. По сути, он ускоряет процесс настройки среды для приложения. Мы запаковываем приложение в образ и можем развернуть его, где угодно. То есть, отделить наше приложение от собственно инфраструктуры и одновременно управлять инфраструктурой как приложением. Docker позволяет запустить на одном хосте одновременно несколько контейнеров.
Главное преимущество Docker – это скорость. С Docker можно быстрей тестировать, быстрей выкладывать приложения, быстрей запускать и редактировать код.
Rkt (он же Rocket) — альтернатива Docker, созданная для серверных сред с более строгими требованиями безопасности и производительности. Используется вместе со спецификацией App Container.
CRI-O – еще одна альтернатива Docker, созданная при участии Red Hat, Intel, SUSE, Hyper и IBM. Подходит для запуска контейнеров в практически любой исполняемой среде при условии, что она совместима с OCI (в частности, это может быть runc или Clear Containers от Intel).
Kubernetes (он же K8s) – это, пожалуй, самый популярный сегодня оркестратор, система управления контейнерами. Если в рамках одной ОС вы можете справиться средствами, к примеру, Docker, то для запуска сервисов на нескольких серверах сразу или запуска нескольких тысяч контейнеров в сложном порядке без Kubernetes вам придется сложно. Kubernetes — это API высокого уровня, которое позволяет логически группировать контейнеры, балансировать нагрузку и определять для них размещение.
Основными преимуществами K8s являются гибкость и модульность. От позволяет запустить множество задач из тысяч приложений с любых хостов – тоже нескольких сразу. Модули инструмента можно комбинировать по-разному, сохранив при этом все его возможности.
K8s может работать в связке с другими инструментами контейнеризации, например, с Docker.
Kubernetes был создан Google как проект с открытым кодом больше 10 лет назад. Сегодня Kubernetes as a Service есть у всех крупных поставщиков облачных решений — Yandex, Google, AWS, Azure.
Swarm – это инструмент для кластеризации контейнеров Docker и объединения их в виртуальные хосты. Он был разработан позже, чем Docker, и стал часть его платформы. Так как у Docker Swarm есть удобный REST API-интерфейс, автоматически совместимый с API Докера, то пользователям Докера сразу же стали доступны инструменты для работы с кластерами контейнеров, без добавления дополнительных сущностей. Инструмент подходит для работы с ограниченным числом контейнеров (не более 50 000) и нод (не более 1 000), поэтому в большей степени ориентирован на малые и средние компании.
Nomad by HashiCorp – еще один инструмент оркестрации контейнеров, созданный компанией HashiCorp и любимый поклонниками их стека (Terraform, Vagrant). Поддерживает работу не только с Docker, но и другими инструментами контейнеризации. Позволяет поддерживать серьезные сетапы и многочисленные дата-центры. Отметим еще, что у этого инструмента очень качественная документация.
Сборка и тестирование приложений
Кратко остановимся на следующих инструментах для сборки и тестирования приложения — Jenkins, TeamCity, GitLab CI, Bamboo.
Jenkins — пожалуй, самый популярный сегодня инструмент для непрерывной доставки и интеграции кода с использованием контейнеров для сборки и развертывания. Jenkins — это проект с открытым исходным кодом. Он достаточно просто интегрируется с другими инструментами для тестирования и развертывания. Работает с системами управления версий Git, Mercucial, CVS, Subversion и другими. Возможности инструмента могут быть расширены при помощи плагинов.
Jenkins работает в контейнере сервлетов (к примеру, в Арасhe Tomcat), что позволяет расширить возможности сервера.
Может выполнять проекты Apache Ant, Apache Maven, пакетные файлы Windows и произвольные сценарии оболочки. Включает несколько способов запуска сборки — в порядке очереди по завершению другой сборки, по плану, по запросу, после фиксации изменений в системах управления версиями.
Bamboo — продукт от Atlassian для непрерывной интеграции. Его преимущество в том, что все функциональные возможности являются встроенными, не требуют дополнительной загрузки плагинов, в отличие от Jenkins. Удобен тем, что есть возможность простой интеграции с другими разработками Atlassian, в частности, с JIRA и Bitbucket. Также его можно использовать в облаке или установить на свои сервера.
TeamCity — это инструмент непрерывной интеграции от JetBrains на основе сервера, создающего инструмент для управления. Отличается удобным пользовательским интерфейсом. Этот инструмент умеет тестировать код перед коммитом. Благодаря удаленной сборке перед запуском, предотвращает запуск кода с ошибками, которые нарушают его сборку. В TeamCity есть функционал, который позволяет делать несколько сборок одновременно, при этом тестирование проводится на разных платформах и в разном программном окружении.
TeamCity может быть интегрирован с разными средами разработки — Eclipse, IntelliJ IDEA, Visual Studio. Поддерживает платформы Java, PHP, .NET и Ruby.
GitLab CI — инструмент для непрерывной интеграции при помощи образа Docker из Docker Hub. Это позволяет не беспокоиться об установке платформ типа Node.js, Ant, Maven на сервер, так как с GitLab CI мы можем ссылаться на любые зависимости, доступные на Docker Hub, без установки их на нашем сервере. В Jenkins, например, для получения аналогичной функциональности нужно будет установить дополнительный плагин.
Непрерывное развертывание и управление инфраструктурой как кодом
DevOps-инструменты для непрерывного развертывания и управления инфраструктурой как кодом — Puppet, Chef, Ansible, SaltStack.
Puppet — инструмент с открытым исходным кодом для управления конфигурацией. Позволяет настраивать, разворачивать и управлять парком серверов или компьютеров. В случае необходимости дает возможности для динамического масштабирования числа машин. Развивается в рамках концепции Infrastructure as a code. Создавалось, чтобы управлять конфигурацией ОС внутри сети.
Chef тоже предназначен для управления инфраструктурой и относится к проектам с открытым кодом. Может использоваться для сложных инфраструктур – с виртуальными, физическими или облачными машинами.
Надо сказать, оба вышеописанных инструмента – в числе «ветеранов» (выход первых версий — 2005 и 2009 годы). Они хороши в масштабировании, настроены на работу с клиент-серверной архитектурой. Но есть некоторые сложности в работе с ними для новичков, так как, например, шаблоны конфигураций нужно писать на Ruby.
Поэтому мы остановимся еще на более современных и простых инструментах для управления инфраструктурой.
Ansible — это инструмент с открытым исходным кодом для управления инфраструктурой и развертывания приложений. Позволяет автоматизировать как простые, так и многоуровневые ИТ-приложения. Ansible прост и в установке, и в использовании, даже для новичков. Шаблоны конфигураций пишутся в виде YAML-формата. Так как инструмент отличается безагентской архитектурой, вам не нужно будет заморачиваться с установкой клиентов на управляемых машинах — они взаимодействуют через SSH/PowerShell. Единственный недостаток Ansible в том, что он может не подойти для инфраструктуры, содержащей более тысячи хостов – может быть существенное падение скорости.
SaltStack — инструмент с открытым исходным кодом. Написан на python и пользуется push-моделью для выполнения команд по SSH. SaltStack может взаимодействовать с машинами и агентским, и безагентским способами. Поддерживает как горизонтальное, так и вертикальное масштабирование сети. Для записи скриптов используются YAML-шаблоны.
Из недостатков отметим, что у SaltStack не самая понятная документация.
Управление облачными ресурсами – Terraform
Для управления облачными ресурсами в DevOps традиционно используется Terraform, инструмент, разработанный компанией Hashicorp. Terraform позволяет настраивать, разворачивать, изменять, управлять версиями инфраструктуры. А значит, пользователь может легко вносить или отслеживать изменения в инфраструктуре.
Он достаточно несложный в установке и дальнейшей работе – инфраструктура для развертывания описывается в декларативном формате, проверяется при помощи команды terraform plan и запускается с terraform apply. В бесплатной версии Terraform отсутствует серверная часть, которая должна собирать логи, управлять и следить за выполнением процессов. В платной версии эта функциональность представлена.
Мониторинг и оповещения
Назовем лишь некоторые из современных решений для мониторинга и алертинга – Prometheus, Grafana, NewRelic, DataDog, PagerDuty.
Prometheus появился в 2012 году и сегодня стал уже практически стандартом для мониторинга. Так, его используют для своих систем мониторинга такие разработчики ПО, как DigitalOcean и Docker.
Prometheus – решение с открытым исходным кодом, в нем собраны самые разные экспортеры, которые позволяют быстро настроить мониторинг вашей инфраструктуры. Также возможна настройка многих дополнительных инструментов.
Prometheus может осуществлять мониторинг практически любых систем – от серверов и баз данных до отдельных виртуальных машин. Так как он способен обнаруживать целевые объекты, Prometheus отлично подходит и для решений с использованием контейнеров и распределенной архитектуры.
Grafana — это тоже решение из числа open source, предназначенное для отслеживания показателей инфраструктуры, приложения и аппаратных устройств. Grafana может получать информацию из разных источников, к примеру, из Prometheus или Elasticsearch. С ее помощью можно настроить визуализацию полученных данных и получение оповещений. Также есть возможность для создания и совместного использования панели инструментов.
New Relic — это SaaS-инструмент для мониторинга и анализа производительности приложений. В режиме реального времени собирает и представляет на диаграммах, графиках и отчетах актуальные данные о производительности веб-приложений и уровне удовлетворенности пользователей.
DataDog — это SaaS-платформа анализа данных, предоставляющая инструменты для мониторинга облачных приложений, серверов, баз данных. Может быть интегрирована с веб-серверами и другими приложениями. Позволяет визуализировать графики мониторинга инфраструктуры в реальном времени.
PagerDuty – платформа для обработки инцидентов с возможностями для интеграции и выставления нужных вам настроек. Может обрабатывать инциденты, устанавливать порядок дежурств и направлять алерт-сигнал дежурному по уровню срочности и важности инцидента. Об инциденте высокой важности инженер будет уведомлен звонком, в ином случае это будет push/SMS.
От редакции
Если вам интересно посещать открытые онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN. *Анонсы мероприятий каждую неделю
Топ 25 инструментов DevOps 2021

В ходе опроса, проведенного аналитическим отделом Harvard Business Review, 48% респондентов заявили, что их компания полностью полагается на DevOps в контексте повышения эффективности. А более 80% представителей индустрии программного обеспечения заявили, что DevOps значительно повышает ценность их работы в том или ином виде.
Более того, согласно результатам вышеупомянутого опроса, DevOps увеличивает скорость выхода на рынок, масштабируемость, инновационный потенциал и качество продукции для компаний-разработчиков программного обеспечения на глобальном уровне.
2021 год станет важным годом для раскрытия потенциала DevOps. Он охватывает как команды разработчиков, Ops, IT и отделы обеспечения безопасности, так и различные этапы разработки программного обеспечения. Именно поэтому для каждой сферы существует множество инструментов на любой вкус и цвет.
Давайте подробно рассмотрим наиболее выдающиеся инструменты DevOps, доступные на рынке в настоящее время, с учетом важных категорий жизненного цикла CI/CD.
Управление конфигурацией:
Puppet
Puppet — это инструмент управления конфигурацией и развертыванием программного обеспечения с открытым исходным кодом, который обычно используется для приведения хостов к нужному состоянию и поддержания этого состояния. Puppet является агентно-ориентированной моделью и чаще всего используется в Linux и Windows для одновременного управления несколькими серверами приложений. Puppet в основном используется в конфигурациях клиент/сервер с управляемыми узлами, которые остаются синхронизированными с сервером. С помощью R10K, инструмента управления кодом Puppet, стало гораздо проще внедрять автоматические или ручные изменения, обновления, обзоры и тесты кода для CI/CD. Файлы R10K и Puppetfiles также можно использовать для создания автоматического развертывания ваших сред. Такие агентно-ориентированные развертывания отличаются особой точностью, своевременностью и способностью ведения журналов регистрации ошибок.
Puppet также предлагает легкую интеграцию с Git для управления версиями.
Puppet является декларативной системой и обычно подходит для базовой компоновки вместо оркестровки.
Пара недостатков состоит в следующем:
- Медленная скорость выполнения задач
- Неспособность Puppet проверять состояние системы за пределами ресурсов exec без записи пользовательских фактов
- Hiera, которая является системой поиска данных конфигурации с ключевыми значениями Puppet, работает медленно и ее трудно устранить
Ansible
Ansible — это инструмент управления конфигурацией и оркестрацией с открытым исходным кодом, который известен своей простотой и производительностью. Ansible запускается на главном устройстве/машине и использует SSH для подключения к узлам. Ansible можно запускать на любом устройстве с установленным Python 2 (версия 2.7) или Python 3 (версии 3.5 и выше), включая Red Hat, Debian, CentOS, macOS и BSD.
Ansible позволяет очень легко управлять конфигурациями (или плейбуками) с помощью YAML (еще одного языка разметки). Так же Ansible способствует эффективной автоматизации кросс-платформенных задач. Стоит подчеркнуть, что здесь есть режим извлечения Ansible для репозиториев и выполнения команд из определенных файлов. Преобразование сценариев оболочки и файлов конфигурации в сборники или Ansible Playbooks также легко, плюс ко всему, по этому вопросу доступно множество документации.
Некоторые слабые стороны Ansible включают в себя:
- Медлительность с масштабированием или расширением системы
- Отсутствие поддержки Windows
- Неэффективен в случае массовой синхронизации сотен серверов
Chef
Chef — это еще один инструмент управления конфигурациями с открытым исходным кодом. Chef тоже является агент-ориентированной моделью. Благодаря инструменту “knife” (нож) и коммуникации через SSH клиенты Chef могут запускаться локально на каждом клиентском компьютере. Отличие Chef от Puppet состоит в дополнительном слое под названием Workstation, который содержит в себе все конфигурации. Эти конфигурации сначала автоматически тестируются на локальных компьютерах, а затем передаются на сервер.
Chef не превзойдён в случае если конфигурация имеет зависимости между хостами. Он использует описания состояния системы (пакеты, существующие пользователи, каталоги и т.д.) и сравнивает их с экземплярами агентов в реальном времени, гарантируя, что объекты останутся синхронизированными.
Возможности автоматизации Chef для обслуживания более крупных сетей с использованием таких сервисов, как AWS OpsWorks, широко известны в различных отраслях. Chef помогает обеспечить безопасность и целостность вашей сети, а также ее развертывание. Chef Inspect — это платформа с открытым исходным кодом, которая позволяет проводить автоматическое и ручное тестирование и аудит ваших приложений.
Несмотря на сильный графический интерфейс Chef, использовать его возможности на полную мощность, можно только уже освоив Ruby, особенно когда дело доходит до сложных задач и настроек. Вы можете добиться отличного уровня кастомизации, написав скрипты в Chef (также известные как cookbooks и recipes), но во многих ситуациях этого недостаточно.
Пара недостатков Chef заключаются в следующем:
- Периодическая необходимость сверки настроек с мастером для установки обновлений
- Сложно освоить новичкам
- Отсутствие подробной документации
- Не универсальна (сложность масштабирования)
Build:
Jenkins
Jenkins — это средство автоматизации с открытым исходным кодом, основанный на Java, которое используется для автоматизированного создания, тестирования и развертывания программного обеспечения, упрощая непрерывную интеграцию (CI) и непрерывное развертывание для пользователей. Для всех вышеуказанных целей Jenkins использует специальные плагины.
Jenkins проверяет новый пул запросов, включает новые рабочие ветви в основной код, запускает автоматизированные тесты, собирает новые данные, сообщает об ошибках и развертывает обновления кода в среде QA для ручного тестирования.
Jenkins Pipeline — это сочетание заданий для непрерывной доставки программного обеспечения с использованием Jenkins. Достаточно выбрать необходимые файлы сборки в конвейерах, загрузить их в SCM и поставить задачу.
Jenkins существует уже очень давно и уже практически стал золотым стандартом благодаря своей зрелой экосистеме, поддержке плагинов, документации и его комьюнити. За последние годы Jenkins претерпел несколько обновлений. Теперь он является одним из лучших вариантов для многих компаний из-за его простого UX / Синтаксиса для пайплайнов и интеграции с Docker.
Слабые стороны Дженкинса:
- Использовать Jenkins, можно только освоив Groovy, который печально известен своими сложностями и несостыковками. Скрипты Groovy в Jenkins нелегко писать и редактировать, особенно когда требуется много изменений.
- Довольно часто придется вручную настраивать сборки пользовательского интерфейса, файлы конфигурации жесткого кода и недоработанные элементы управления доступом.
- Jenkins практически невозможно использовать без JenkinsFile, это простой текстовый файл, который используется для создания пайплайна и располагается в системе контроля версий вместе с исходным кодом…
TeamCity
TeamCity — это один из самых популярных инструментов CI (доступна ограниченная бесплатная версия), который славится своим простым в применении интерфейсом, удобными настройками и креативными функциями. TeamCity работает в среде Java, на сервере Apache Tomcat, но также может быть установлен на серверах Windows и Linux.
Нужен ли TeamCity именно вам? Это во многом зависит от ваших потребностей. Если вы располагаете бюджетом, и ваши основные задачи включают настройку фиксированного количества агентов сборки с целью создания параллельных цепочек сборки с зависимостями от репозитория Snapshot и артефактов, то TeamCity просто создан для вас. TeamCity также обладает довольно солидной документацией. Функция TeamCity «Snapshot Dependencies» позволяет сохранять одну и ту же исходную версию во всем пайплайне без низкоуровневых реализаций кода.
Стоит отметить, что специально для вас TeamCity автоматически исправляет агенты snowflake с помощью специальных инструментов.
Основанные на конкретных шаблонах, конфигурации сборки TeamCity могут значительно упростить вам жизнь.
TeamCity нативно поддерживает автоматическое масштабирование агентов в AWS, GCE и Azure. Он также поддерживает VMware и Kubernetes с помощью плагинов и имеет встроенную интеграцию с GitHub.
Некоторые недостатки TeamCity заключаются в следующем:
- Дорогой
- Журналы отладки и журналы ошибок довольно сложны для восприятия
Bamboo
Bamboo — это сервер непрерывной интеграции и развертывания, разработанный компанией Atlassian. Одним из ключевых преимуществ Bamboo является его способность интегрировать автоматизированные сборки, тесты и выпуски в единый рабочий процесс с другими продуктами Atlassian (JIRA, BitBucket, Stash, Hipchat и Confluence), создавая прочную экосистему разработки и доставки программного обеспечения.
Bamboo имеет понятный и простой в использовании графический интерфейс.
Простота интеграции с BitBucket, Confluence и Jira также является несомненным преимуществом Bamboo. Он может инициировать подобные cron триггеры, которые пригодятся для запуска, если у вас есть уже имеется необходимая аналитика обзоров, автоматическое тестирование и автоматизированные процедуры, а сотрудники находятся вне офиса.
Но и Bamboo не идеален. Вот некоторые из его недостатков:
- Анализ кода — не самая сильная сторона Bamboo
- Отсутствие возможности централизации и конфигурации сборки
- Нет глобальной конфигурации инструментов (вам придется вручную устанавливать каждый инструмент)
- В Bamboo отсутствуют поддержка и плагины для учетных данных, что означает, что изменения паролей отразятся на всех привязанных к Bamboo проектах
Управление исходным кодом:
GitHub
GitHub — один из самых популярных инструментов управления исходным кодом c миллионами пользователей по всему миру. Основные преимущества GitHub: понятный пользовательский интерфейс с продвинутыми функциями, такими как восстановление случайно удаленных репозиториев, предотвращение случайных удалений, различные интеграции и хороший уровень безопасности. GitHub славится практически не бывает сбоев или простоев, что делает его максимально надежным.
GitHub идеально подходит для проектов с открытым исходным кодом. Плюс ко всему, вокруг него собралось довольно широкое коммьюнити.
Стоит отметить, что Microsoft владеет GitHub. По этой причине для разработчиков Azure и инструментов Microsoft доступны различные возможности интеграции. GitHub предоставляет вам больше вариантов контроля процессов CI/CD.
Между тем, важно учитывать, что GitHub предлагает бесплатные частные репозитории (максимум 3-м сотрудникам на репозиторий).
BitBucket
BitBucket — это веб-сервис для хостинга проектов и их совместной разработки, основанный на системах контроля версий Mercurial и Git. BitBucket полезен, если вы используете другие продукты Atlassian. BitBucket также известен своей эффективностью, когда дело доходит до управления большим количеством репозиториев. В BitBucket вы можете бесплатно создавать любое количество репозиториев.
BitBucket также славится своей интеграцией с JIRA и Confluence. Это поистине лучший выбор для проектов, связанных с частными репозиториями.
Еще одним преимуществом BitBucket является практика CI/CD, позволяющая реализовывать непрерывное развертывание
Несовершенства BitBucket включают в себя:
- BitBucket не поддерживает соглашение SLA
- Запутанный пользовательский интерфейс
GitLab
GitLab, основанный на Git, предоставляет функции управления репозиториями, интеграция с CI-системами, отслеживание ошибок, деплой и анализ кода. Большинство компаний предпочитают использовать GitLab для управления исходным кодом из-за его сильных сервисов CI. GitLab — это то, что нужно, если вы хотите интегрировать CI/CD на своем собственном сервере. GitLab — это бесплатный сервис с открытым исходным кодом, предоставляющий неограниченное количество бесплатных частных репозиториев.
В дополнение к вышеупомянутым преимуществам, GitLab позволяет использовать частные репозитории и имеет простой интерфейс для управления контейнерами.
Развертывание:
Spinnaker
Spinnaker — это платформа с открытым исходным кодом, которая работает с Kubernetes, облачной платформой Google, AWS, Microsoft Azure и Oracle Cloud. В основном она используется для непрерывного развертывания и доставки, принимая ваши артефакты и организуя их развертывание.
Панель управления и интерфейс Spinnaker очень просты в применении. Разработчики могут легко перенести свой код в бранч для релиза, а данная платформа, в свою очередь, автоматически создаст, протестирует, проверит и отправит код в производство. С помощью Spinnaker вы можете использовать бесшовные интеграции сборок Kubernetes, GitHub и Google, чтобы легко вносить и развертывать изменения в свое программное обеспечение.
Spinnaker поможет нативно настроить AMI EC2, ASG и настраивать балансировку нагрузки.
Недостатки заключаются в следующем:
- Отсутствие возможности масштабируемости
- Скудная документация
- Проблемы с автоматизацией задач
Octopus Deploy
Octopus Deploy — это CD-инструмент, используемый для автоматизированного развертывания. Он может автоматически развертывать приложения и службы на устройствах агентов (“щупальцах”). Octopus Deploy подходит для ASP.NET веб-приложений, приложений Java, приложений NodeJS, а также запуска пользовательских сценариев в нескольких средах, включая AWS и Azure. В основном он используется с AzureDevOps и предпочитается компаниями, работающими в экосистеме Microsoft.
Octopus Deploy может интегрировать инфраструктуры CI пайплайнов. Вы можете инициировать API-вызовы в Octopus для создания новых выпусков и отправки двоичных файлов/кодов (binaries) через CI пайплайн.
У Octopus есть некоторые недостатки, к которым относятся:
- Высокая стоимость
- Отсутствие возможности экспорта переменных между проектами
Argo CD
Argo CD — это декларативный инструмент непрерывного развертывания GitOps для кластеров Kubernetes.
Argo CD извлекает конфигурации из репозитория и синхронизирует существующие манифесты Kubernetes, описывающих ваше приложение в репозитории Git. Argo CD может автоматически применять обновленные или измененные манифесты для фиксации изменений в вашем кластере. Сервер ArgoCD может отслеживать ветви развертывания ваших основных проектов, а также может автоматически определять, когда ветвь сборки объединяется с ветвью развертывания. Argo CD сначала развертывает новую версию, предотвращая таким образом вероятность простоев.
Недостатки Argo CD включают в себя:
- Не поддерживает CI, что означает, что вам понадобятся другие инструменты, такие как Jenkins, Travis, Circle CI или Gitlab CI, если вам нужен полный конвейер CI/CD.
- Не поддерживает rollback hook
Управление уязвимостями и (возможными) угрозами:
TwistLock (Сети Пало-Альто)
TwistLock это лидирующее решение, помогающее клиентам защищать контейнеры и контейнерные среды на протяжении всего их жизненного цикла. Сервис известен своей интеграцией с контейнерами Kubernetes и Docker. TwistLock, теперь принадлежащий Palo Alto Networks, обеспечивает проверку безопасности с помощью Runtime App Security Protection и автоматического сканирования контейнеров.
У TwistLock есть развёрнутая документация. Он прост в развертывании и обеспечивает оптимизированное потребление ресурсов. Он также известен своей интеграцией пайплайна CI/CD, строгим соблюдением протоколов безопасности контейнеров и сканированием изображений.
Плюс ко всему, TwistLock известен своим скрупулезным анализом безопасности. Сервис использует возможности искусственного интеллекта для изучения вашей среды, хотя некоторые считают автоматические cron-задания слишком запутанными.
Также в TwistLock возможно сканирование безопасности на базе SaaS (prisma cloud) или on-Prem.
Sysdig
Sysdig — это инструмент мониторинга, используемый для сбора информации о системе (облачной инфраструктуры, службах и приложениях). Sysdig обычно используется для обеспечения безопасности контейнеров, а также для управления и оркестрации PaaS инфраструктур.
Sysdig также полезен для мониторинга кластеров OpenShift, поскольку он предоставляет детализированные данные для дальнейшего анализа.
Важным отличием Sysdig от других подобных инструментов является тесная интеграция мониторинга контейнеров с процессом оркестрации.
Sysdig очень полезен, если вы хотите разобраться в потоке трафика. Это сервис с открытым исходным кодом, что позволяет собирать сведения о хосте на уровне системных вызовов ядра. Процесс захвата также может быть автоматизирован для развертывания в качестве контейнера Docker напрямую или с помощью daemonset.
Дополнительные функции Sysdig включают в себя:
- Сетевые графики
- Возможность запуска self-hosted версии системы мониторинга Sentry
- Мониторинг систем на базе AWS
- Простая интеграция
- Достойный уровень поддержки клиентов
Anchore
Anchore — это комплексное решение для обеспечения безопасности контейнеров, которое легко интегрируется с различными инструментами и платформами. Anchore проверяет контейнеры на соответствие требованиям по целому ряду различных параметров, что позволит командам соблюсти все необходимые отраслевые стандарты безопасности.
Благодаря такому сервису, команды по обеспечению безопасности смогут с легкостью проводить аудит и проверять соответствие требованиям в любом отделе.
Дополнительные характеристики Anchore:
- Поддержка веб-приложений, включая облачные или локальные on-prem среды Kubernetes и CI/CD платформ
- Соответствие стандартам безопасности
- Проверка по следующим параметрам:
- Сканирование уязвимостей
- Секреты и пароли
- Пакеты операционной системы
- Сторонние библиотеки
- Проверка файлов Dockerfiles и т.д.
Тестирование качества:
JMeter
JMeter — это инструмент нагрузочного тестирования, используемый для тестирования веб-приложений. Несмотря на то, что JMeter используется для тестирования нагрузки/производительности, его все равно можно использовать для инициализации вызовов API, обработки ответов и анализа текущего состояния. Плюс ко всему, JMeter поддерживает множество плагинов.
Для инициирования нескольких подключений на поток во время тестирования можно использовать функцию многопоточности.
JMeter не зависит от платформы и работает бесперебойно в различных средах.
Благодаря JMeter, результаты тестов можно просматривать различными способами, включая графики, диаграммы, древовидные представления, XML и JSON.
JUnit
JUnit — это платформа модульного тестирования программного обеспечения, в основном используемая для приложений Java. Фреймворк JUnit относится к семейству Java-фреймворков xUnit.
JUnit использует Аннотации (Annotations), которые помогают определить методы, максимально предпочтительнее для использования в каждом конкретном тестировании. Его функция запуска тестов известна в сообществе разработчиков благодаря своим уникальным возможностям кастомизации и настройки. Также здесь есть отличная опция использовать Утверждения (Assertions) для проверки ожидаемых результатов.
В JUnit вы можете использовать различные комбинации между несколькими аргументами (arguments). Здесь процесс создания и управления обширными наборами модельных тестов станет максимально простым. JUnit также может автоматически тестировать все функции вашего приложения перед запуском тестирования на уровне модуля или системы.
Selenium
Selenium — это комплексная платформа для тестирования программного обеспечения, известная своим удобным пользовательским интерфейсом, который позволяет тестировщикам имитировать поведение веб-системы, отправлять запросы API и анализировать ее дальнейшие действия.
Selenium позволяет писать сложные тестовые сценарии на RUBY или HTML для обеспечения комплексного тестирования.
Selenium предоставляет разработчикам веб-приложений полностью интегрированную среду разработки для редактирования, записи и отладки тестов. Вы можете задать индивидуальные начальные и контрольные точки для каждого конкретного тестового случая.
Ключевые особенности Selenium также включают:
- Интеграция с несколькими платформами разработки, такими как Jenkins, Maven, TestNG, QMetry, SauceLabs.
- Параллельное тестирование с помощью Selenium Grid
- Совместимость со всеми известными языками, включая Java, Ruby, C#, PHP, JavaScript, Perl и R.
SonarQube
SonarQube — это инструмент с открытым исходным кодом, используемый для контроля качества кода, непрерывной проверки, обеспечения безопасности и анализа ошибок. Он отлично интегрируется с Java, Python, XML и PHP и т.д. SonarQube может добавлять правила с помощью XPath выражений, а вы, в свою очередь, можете менять настройки для принудительного применения в определенных ситуациях, где необходимо проигнорировать исключения.
SonarQube в основном используется для статического анализа. Он отлично интегрируется для GitLab. Панели мониторинга SonarQube и высокоуровневое отслеживание позволяют отлично контролировать качество кода.
Пара недостатков заключаются в следующем:
- Не очень хорошо работает с JavaScript
- Иногда медленный
- Ограниченная поддержка сторонних инструментов и плагинов
Ведение журнала и мониторинг:
Grafana
Grafana — платформа для аналитики и мониторинга с открытым исходным кодом, базирующаяся на лицензии Apache 2.0. Известна своим превосходным пользовательским интерфейсом, графиками, диаграммами, аналитикой в реальном времени и триггерами. Grafana может извлекать данные из нескольких источников, включая Graphite, InfluxDB, OpenTSDB и Prometheus.
Grafana в основном используется для мониторинга Docker контейнеров, сетевого оборудования, пропускной способности, потока данных, виртуальных серверов, инфраструктуры Azure, баз данных и веб-приложений. Grafana также славится своими плагинами и бесшовной интеграцией с Telegraf и Zabbix.
Grafana может визуализировать детализированные данные, включая такие показатели, как точное время отключения, события непосредственно перед отключениями, журналы пользователей, температура в центре обработки данных и прогнозы производительности.
New Relic
New Relic — это полнофункциональный инструмент мониторинга, используемый для отслеживания облачных приложений и программного обеспечения. New Relic предлагает не только богатые разнообразием информационные панели, но и поддержку распределенной трассировки, подробные журналы, обеспечение полноценного мониторинга процессов. New Relic строго отслеживает внутренние вызовы и может дать подробное объяснение причин замедления работы системы.
Данный инструмент полезен для компаний, которым необходим подробный анализ нескольких stack профилей.
New Relic — недешевая платформа, но компания недавно адаптировала свою модель ценообразования под целевого потребителя.
Некоторые недостатки, которые включает в себя New Relic:
- Низкий уровень сервисной поддержки
- Дорого даже после корректировки цены
- Сложный процесс отладки
Nagios
Nagios — это программа с открытым исходным кодом, которая отслеживает системы, сети и инфраструктуру. Он активно отслеживает работоспособность служб и обеспечивает сбор, фильтрацию и нормализацию логов. Nagios показывает причины простоя, его продолжительность и возможные причины возникновения неполадок.
Более того, Nagios предлагает несколько вариантов конфигурации и функций оповещения. Вы можете отменять оповещения для хоста, включать режим поддержки, настраивать параметры уведомлений и многое другое.
Nagios поддерживает сотни плагинов. Вы можете создавать свои собственные настройки и разрабатывать поддержку плагинов специально под себя.
Однако, стоит отметить, что платформа Nagios уже порядком устарела и с ней не так просто работать, учитывая постоянные обновления в других средах. В ней не хватает возможности конфигурации в базе данных, что заставляет использовать конфигурационные файлы.
ITSM и коллаборации:
JIRA
JIRA — это инструмент управления для проектами и совместной работы, используемый компаниями-разработчиками программного обеспечения по всему миру.
Это по настоящему мощный инструмент, предлагающий множество настроек и конфигураций.
Для того, чтобы использовать все преимущества и возможности JIRA, вам скорее всего понадобится эксперт, так как JIRA довольно сложно настроить под конкретный запрос. В JIRA’s Portfolio вы можете создавать временные рамки и планы релиза спринтов. JIRA’s Structure будет полезна для отслеживания процессов на детальном уровне.
Другие функции JIRA включают в себя:
- Zephyr для JIRA — это собственное тестовое приложение, которое можно использовать в течение всего жизненного цикла тестирования программного обеспечения
- Инструмент исследования критического пути/ Critical path tool
- Собственные инструменты для расчета скорости процессов
- Интеграция с продуктами Atlassian, такими как BitBucket и Bamboo
Недостатки JIRA заключаются в:
- Скучный и запутанный пользовательский интерфейс
- Бакеты/контейнеры в JIRA называются “Проектами”, что тоже немного сбивает с толку
Slack
Slack — это инструмент для совместной работы и коммуникаций, который в последнее время приобрел огромную популярность. Slack славится своими разговорами в режиме реального времени, функцией поиска и удобным пользовательским интерфейсом.
Slack быстрыми темпами замещает электронную почту в индустрии программного обеспечения благодаря своему надежному пользовательскому интерфейсу, интересным функциям и гибкости.
Благодаря такой популярности, интеграция со Slack стала актуальной и для обмена мгновенными сообщениями.
Интеграция JIRA и Slack часто используется для ведения project-журналов, онлайн-ретроспектив, организации продажи билетов/тикет-систем и оповещений.
Персонализированные чат-боты, отлаживание инфраструктуры и триггеров также могут быть задействованы в Slack.
Microsoft Teams
Microsoft Teams — это инструмент для общения и совместной работы. Он полезен для компаний, работающих в экосистеме Windows. Помимо службы обмена мгновенными сообщениями, Teams полезен благодаря своей интеграции с платформой Azure DevOps. Вы также можете дополнительно подключить свои команды к репозиториям и конвейерам Azure.
Teams предлагают различные каналы, по которым команды могут сотрудничать друг с другом. Таким образом для каждого проекта будет создан свой репозиторий для связи, который может быть использован в любое время.
Дополнительные функции включают в себя:
- Репозитории файлов
- Телефонная/видеоконференцсвязь
- Интеграция чат-ботов
- Интеграция с Office 365
Подводя итог, стоит отметить, что да, выбор действительно велик и такое множество доступных инструментов может быть пугающим. Отсутствие стандартизации и автоматизации может привести к большим сложностям обучения при онбординге и/или дальнейшей передаче управления. Часто команды внутри одной и той же организации инвестируют в аналогичные, дублирующие друг друга инструменты, тратя впустую как время, так и финансовые ресурсы. Таким образом, помимо выгорания разработчиков от бесконечного создания и интеграции цепочек инструментов, версии инструментов устаревают, что приводит к проблемам с безопасностью и дальнейшей интеграцией.
- Блог компании Nixys
- Исследования и прогнозы в IT
- DevOps
- Софт