- PVSM.RU - https://www.pvsm.ru -

В будущее с интеграцией сервисов Jenkins & Oracle APEX

В процессе управления большими объемами данных и их визуализацией мы все чаще сталкиваемся с необходимостью внедрения единого инструмента доступа к управлению функционалом в хранилище. Причем этот инструмент должен быть одинаково удобен и понятен всем сотрудникам подразделения по управлению данными: администраторам, аналитикам, разработчикам и тестировщикам.

В будущее с интеграцией сервисов Jenkins & Oracle APEX - 1 [1]

Меня зовут Виталий, я отвечаю в Ростелекоме за направление автоматизации тестирования и внедрение DevOps процессов. В данной статье я расскажу об интересном решении данной проблемы в крупном хранилище данных компании Ростелеком.

И вот как мы пришли к такому набору инструментов для решения данной задачи.

Для начала небольшая предыстория. Ранее я писал о том, что мы написали собственный модуль на Python для автоматизации процесса инсталляции объектов в хранилище данных. Он управляется Jenkins-ом и позволяет запускать необходимый функционал как вручную по кнопке с вводом необходимых параметров запуска, так и полностью автоматически по расписанию без участия пользователя. Также в нашей компании уже был реализован ряд приложений, написанных при помощи Oracle APEX.

Что же такое Oracle Application Express (Oracle APEX)?

Oracle APEX – в более ранних версиях приложения имел название HTML DB. При помощи данного инструмента, используя только браузер и имея опыт программирования на таких языках как PL/SQL и JavaScript, можно разрабатывать быстрые, масштабируемые и безопасные веб-приложения, которые впоследствии легко развернуть на любом контуре для проведения разработки, тестирования и последующей имплементации в продакшн.

Для построения формы ввода данных отсутствует необходимость программировать интерфейс сложным способом. В приложении есть много готовых шаблонов, которые можно переиспользовать для разработки собственного решения. Конечные пользователи также получают доступ к приложению через браузер, тем самым отпадает необходимость установки приложения на компьютер. И при всех вышеперечисленных плюсах метаданные (информация об используемых данных) в нашем хранилище лежат в БД Oracle, поэтому данный инструмент мы никак не могли обойти стороной.

В будущее с интеграцией сервисов Jenkins & Oracle APEX - 2
Пример архитектуры APEX-приложения

Oracle REST Data Services (ORDS) — это сервис данных, заменяющий Oracle HTTP server и mod_plsql, основанный на Java EE. Он предоставляет взаимодействие с объектами посредством RESTfull

Немного о Jenkins

Многие, наверное, уже в курсе, что это за зверь, но для тех кто только присматривается к этому инструменту, я расскажу, что это и как мы его используем в нашем хранилище.

Jenkins – это инструмент непрерывной интеграции, чаще всего используется для разработки программного обеспечения и развертывания приложений на разных этапах процесса разработки. Если говорить простыми словами, то Jenkins предоставляет среду автоматизации процессов. Благодаря своей гибкости и большому набору плагинов он дает возможность интегрироваться в любое приложение или технологию и поддерживает работу с разными системами контроля версий.

В нашем департаменте управления данными с его помощью реализованы CI/CD процессы с прогоном автоматизированных тестов. А еще Jenkins управляет несколькими самописными модулями, благодаря которым автоматизированы многие ручные процессы.

В будущее с интеграцией сервисов Jenkins & Oracle APEX - 3 [2]
Пример интерфейса web-client Jenkins, кликабельно

Проблема непонимания и ее решение

Реализовав многие задачи и автоматизировав их, мы столкнулись с проблемой: управлять этими процессами придется не только DevOps-инженерам и специалистам по тестированию, но и людям, не сталкивающимся с подобного рода инструментами, но участвующими в процессе разработки. Конечными пользователями оказались все внутренние сотрудники департамента. Интерфейс Jenkins-клиента, на мой взгляд, достаточно прост и удобен, но я смотрю на него глазами DevOps, и не все могут посмотреть на него так же. Так как ряд задач у нас должен был запускаться по кнопке сотрудниками, возникла необходимость придумать интерфейс, который был бы дружелюбнее для пользователя. На самом деле, существует плагин для Jenkins под названием Blue Ocean [3], который позволяет изменить UI представление инструмента.

В будущее с интеграцией сервисов Jenkins & Oracle APEX - 4 [4]
Пример интерфейса web-client Jenkins (Blue Ocean plugin), кликабельно

Нашу задачу данный плагин решить не смог, но в качестве альтернативы, если стандартный интерфейс не устраивает, его можно перенастроить. Чаще всего возникает необходимость интегрировать модуль в Jenkins, а не наоборот. В этом и заключается интересность решаемой задачи. На момент ее решения, как я и писал, у нас уже существовал ряд приложений, написанных при помощи Oracle APEX.

В будущее с интеграцией сервисов Jenkins & Oracle APEX - 5 [5]
Пример интерфейса одного из APEX-приложений, кликабельно

Проверив, что его интерфейс достаточно дружелюбен и имеется возможность им управлять, а все параметры для запуска необходимых задач в Jenkins хранятся в БД Oracle, возникла идея запускать ряд задач Jenkins из APEX.

Для этого потребовалось совсем немного времени. Взаимодействие между приложениями было реализовано по архитектурному принципу построения сервис-ориентированных систем типа REST. REST-архитектура подразумевает под собой правила взаимодействия компонентов распределенного приложения в сети. APEX-приложение позволяет использовать данный стиль и предоставляет уже готовый шаблон для формирования процесса отправки HTTP/HTTPs-запросов типа REST при разработке приложения. В результате мы быстро подняли приложение для запуска подобного рода задач, данные для запуска стали подтягиваться напрямую из базы с возможностью их выбора, что исключило возможность ошибки ввода параметров запуска. Сама передача параметров для запуска заданий в Jenkins осуществляется посредством POST-запроса, в теле которого лежит JSON с необходимыми параметрами.

В будущее с интеграцией сервисов Jenkins & Oracle APEX - 6 [6]
Форма вызова REST при разработке APEX-приложения, кликабельно

Пример JSON:

{"parameter":[{"name":"SERVER","labels":"master"},{"name":"INSTANCE","value":"DEV"},{"name":"SRC_CODE_START","value":"SRC_ID"},{"name":"SRC_CODE_END","value":"SRC_ID"},{"name":"MODEL_ID","value":"MODEL_ID"},{"name":"SAVE_DATA","value":"0"}],"statusCode":"303","redirectTo":"."}

В будущее с интеграцией сервисов Jenkins & Oracle APEX - 7 [7]
Пример готового APEX-приложения для вызова процессов Jenkins, кликабельно

Результатом нажатия кнопки “Запустить процесс” будет передача параметров в Jenkins задание и последующий его запуск. Реализовано и отображение логов успешного и неуспешного запусков, которое напрямую возвращается из консоли процесса выполнения Jenkins-задания. Само задание может содержать любой автоматизированный процесс.

В итоге

Интеграция данных приложений в нашем департаменте показала отличный результат. Отпала необходимость заставлять разбираться в инструментарии приложения Jenkins тех людей, которые не должны напрямую с ним работать. Мы смогли разграничить и оставить контроль выполнения задач на уровне Jenkins с использованием настраиваемой матрицы прав, чтобы у пользователей была возможность сборки задач, но не было возможности ее редактирования.

Так как данный эксперимент был признан успешным, появились идеи развития в виде написания собственных open source фреймворков для упрощения взаимодействия с Jenkins и с другими работающими у нас приложениями. Но это уже совсем другая история, о которой я постараюсь рассказать в следующих статьях.

Автор: Vitaliy_Filaretov

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/testirovanie/320550

Ссылки в тексте:

[1] Image: https://habr.com/ru/company/rostelecom/blog/455118/

[2] Image: https://hsto.org/webt/cn/qw/7e/cnqw7ep2anlhoingcdnz0kkno60.png

[3] Blue Ocean: https://jenkins.io/projects/blueocean/

[4] Image: https://hsto.org/webt/nf/bm/rx/nfbmrxda0qsoakr7r_sk-zdvsky.png

[5] Image: https://hsto.org/webt/_8/3m/1a/_83m1abpichgwvvdg5drom4jdce.png

[6] Image: https://hsto.org/webt/q2/ys/ql/q2ysqljeuoqotpiyr2247du9yti.png

[7] Image: https://hsto.org/webt/-w/ly/fb/-wlyfbbynyhjyyjknbq1_tufyyo.png

[8] Источник: https://habr.com/ru/post/455118/?utm_campaign=455118&utm_source=habrahabr&utm_medium=rss