Как сисадмин написал свою библиотеку для Jira на Ruby: история Rujira

Страницы:  1

Ответить
 

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. Надеюсь, этот инструмент сбережет ваше время так же, как он бережет мое при ежедневной автоматизации!-Источник
 
Loading...
Error