Привет, Хабр!
Давайте сразу начистоту: я не профессиональный программист. Я системный администратор и 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. Надеюсь, этот инструмент сбережет ваше время так же, как он бережет мое при ежедневной автоматизации!
