|
Professor Seleznov
|
Привет, Хабр! Давайте сразу начистоту: я не профессиональный программист. Я системный администратор и DevOps-инженер. Мой день состоит из автоматизации процессов, настройки серверов, написания скриптов и бесконечной рутины. И, конечно же, работы с тикет-системами, главная из которых — Jira. Если есть необходимость взаимодействовать с Jira из Ruby-кода, то обычно выбирают гем jira-ruby — заслуженный стандарт индустрии. Однако, попробовав использовать его для простых скриптов автоматизации в админской экосистеме, я понял: этот инструмент слишком избыточен и тяжел для сисадминских нужд. Мне хотелось чего-то простого, легкого и понятного. Так родилась rujira — моя собственная легковесная библиотека для работы с Jira REST API. В этой статье я расскажу, почему меня не устроил стандартный гем, как сисадминский взгляд на инструмент помог сделать его удобнее для простых скриптов, и почему rujira идеально подходит для небольших DevOps-задач. - В чем боль стандартного jira-ruby для простых скриптов? jira-ruby — это отличная, фундаментальная библиотека, если вы пишете крупный коммерческий проект на Ruby on Rails. Но если ваша цель — написать легкий скрипт автоматизации на 50 строк, вы сталкиваетесь со следующими вещами:
- Тяжелые зависимости (ActiveSupport): Гем принудительно тащит за собой зависимости из экосистемы Rails. Для простого консольного скрипта автоматизации или легковесного триггера в CI/CD это неоправданный оверхед.
- Сложная настройка авторизации: Настройка сложных OAuth-рукопожатий или Cookie-сессий — это здорово для больших веб-приложений, но для админского скрипта, работающего по обычному токену, хочется простоты.
- Перегруженная ООП-модель: Попытка навязать интерфейс в стиле ActiveRecord (Issue.find, Issue.save) только усложняет написание простых одноразовых запросов. Зачем мне строить сложные модели классов, если я хочу просто отправить один POST-запрос с JSON-телом и забыть о нем?
- Философия rujira: инструмент от админа для админов При создании rujira я руководствовался простым правилом: сделать инструмент легким, понятным и не перегруженным. Он создавался специально для системных администраторов, DevOps-инженеров и тех, кто пишет небольшие скрипты автоматизации, а не строит огромные корпоративные системы. 1. Простота и гибкость (Блочный DSL) Вместо того чтобы строить сложные абстракции над объектами Jira, rujira работает как гибкий диспетчер запросов. Вы просто описываете то, что хотите отправить, с помощью понятного блочного DSL:
client.Issue.delete("BACKUP-101") do # Легко передаем параметры params deleteSubtasks: true # Если нужно, переопределяем заголовки без костылей headers 'X-Atlassian-Token': 'nocheck' end
Вы можете работать с ответами API в виде обычных и быстрых Ruby-хэшей (wrap_responses: false), что идеально для парсинга данных в консоли, либо включить объектный режим для удобных сокращений (например, issue.add_comment). 2. Поддержка параллельности «из коробки» В админских задачах часто нужно быстро обработать пачку задач (например, закрыть 20 зависших тикетов). Обычный Net::HTTP работает синхронно и медленно. rujira построена на сетевой библиотеке Faraday, что позволяет легко использовать асинхронные адаптеры, такие как Typhoeus (на базе libcurl) или событийно-ориентированный async-http. Также есть режим ленивого выполнения (lazy: true), позволяющий настроить запросы в памяти и выполнить их параллельно в пуле потоков:
client = Rujira::Client.new(url, lazy: true) # Настройка запросов без реального похода в сеть requests = 10.times.map { client.Issue.get("SYS-123") } # Параллельное выполнение в потоках threads = requests.map { |req| Thread.new { req.execute } } threads.each(&:join)
3. Готовые Rake-задачи для консоли (DX) Как системный администратор, я провожу 90% времени в консоли. Поэтому в гем встроен удобный набор Rake-задач для повседневных нужд. Вы можете использовать готовый консольный интерфейс для быстрого общения с Jira прямо из терминала. Библиотека содержит предопределенные задачи для проверки подключения, поиска тикетов, создания и удаления сущностей, работы со спринтами и вложениями. Больше не нужно писать одноразовые скрипты или открывать браузер для простых операций:
# Быстрые команды в терминале для работы с Jira rake jira:whoami # Проверить авторизацию под вашим токеном rake jira:server_info # Тест соединения и получение системной информации Jira rake jira:issue:search JQL='project = SYS' # Быстрый поиск задач по JQL rake jira:issue:create PROJECT=IT SUMMARY="Сбой диска на сервере" # Создание тикета
- Сольная разработка: чего ожидать? Я единственный разработчик этого проекта и, повторюсь, не являюсь профессиональным программистом. Это мое личное видение того, какой должна быть легкая библиотека для автоматизации Jira. Из этого следуют важные нюансы:
- Фокус на главном: В библиотеке отлично реализованы самые популярные админские и DevOps-кейсы: работа с задачами, проектами, комментариями, вложениями, досками и спринтами.
- Возможная нехватка редких фич: Если вам нужны очень специфические энтерпрайз-функции Jira, их может не оказаться в текущей версии. Но поскольку библиотека разрабатывается активно, я с удовольствием добавляю нужный функционал по мере появления новых задач.
- Заключение rujira — это не убийца jira-ruby для гигантских Rails-приложений. Это легкий, производительный и понятный инструмент для системных администраторов и DevOps-инженеров, которым нужно быстро автоматизировать повседневную рутину. Если вам близок этот подход:
- Исходный код библиотеки открыт и доступен для изучения в репозитории на GitHub: github.com/itmagelab/rujira.
- Проект распространяется под MIT-лицензией.
- Гем устанавливается простой командой: gem install rujira.
Буду рад отзывам, пулл-реквестам и звездам на GitHub. Надеюсь, этот инструмент сбережет ваше время так же, как он бережет мое при ежедневной автоматизации!-Источник
|