Привет, Хабр!

Давайте сразу начистоту: я не профессиональный программист. Я системный администратор и DevOps-инженер. Мой день состоит из автоматизации процессов, настройки серверов, написания скриптов и бесконечной рутины. И, конечно же, работы с тикет-системами, главная из которых — Jira.

Если есть необходимость взаимодействовать с Jira из Ruby-кода, то обычно выбирают гем jira-ruby — заслуженный стандарт индустрии.

Однако, попробовав использовать его для простых скриптов автоматизации в админской экосистеме, я понял: этот инструмент слишком избыточен и тяжел для сисадминских нужд. Мне хотелось чего-то простого, легкого и понятного. Так родилась rujira — моя собственная легковесная библиотека для работы с Jira REST API.

В этой статье я расскажу, почему меня не устроил стандартный гем, как сисадминский взгляд на инструмент помог сделать его удобнее для простых скриптов, и почему rujira идеально подходит для небольших DevOps-задач.


В чем боль стандартного jira-ruby для простых скриптов?

jira-ruby — это отличная, фундаментальная библиотека, если вы пишете крупный коммерческий проект на Ruby on Rails. Но если ваша цель — написать легкий скрипт автоматизации на 50 строк, вы сталкиваетесь со следующими вещами:

  1. Тяжелые зависимости (ActiveSupport): Гем принудительно тащит за собой зависимости из экосистемы Rails. Для простого консольного скрипта автоматизации или легковесного триггера в CI/CD это неоправданный оверхед.

  2. Сложная настройка авторизации: Настройка сложных OAuth-рукопожатий или Cookie-сессий — это здорово для больших веб-приложений, но для админского скрипта, работающего по обычному токену, хочется простоты.

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