通过Jenkins和Oracle APEX服务集成进入未来

在管理大量数据及其可视化的过程中,我们越来越需要引入一种工具来访问存储库中的功能管理。 此外,该工具对于数据管理部门的所有员工(管理员,分析师,开发人员和测试人员)也应同样方便且易于理解。



我叫Vitaliy,我在Rostelecom负责测试自动化和DevOps流程实施的方向。 在本文中,我将讨论Rostelecom大型数据仓库中针对此问题的有趣解决方案。

这就是我们得出这样一套用于解决此问题的工具的方式。

对于初学者来说,有一点背景。 之前,我写过我们用Python编写了自己的模块,以自动化在数据仓库中安装对象的过程。 它由Jenkins控制,并允许您通过输入必要的启动参数的按钮手动启动必要的功能,或者根据时间表完全自动地启动,而无需用户干预。 另外,我们公司已经实现了许多使用Oracle APEX编写的应用程序。

什么是Oracle Application Express(Oracle APEX)?


Oracle APEX-在该应用程序的早期版本中称为HTML DB。 使用此工具,仅使用浏览器并具有PL / SQL和JavaScript等语言的编程经验,您可以开发快速,可扩展且安全的Web应用程序,随后可以轻松地将其部署在任何电路上以进行开发,测试和后续生产实现。

要构建数据输入表单,无需以复杂的方式对接口进行编程。 该应用程序具有许多现成的模板,可以重复使用这些模板来开发自己的解决方案。 最终用户还可以通过浏览器访问该应用程序,从而无需在计算机上安装该应用程序。 有了以上所有优点,我们存储库中的元数据(有关所用数据的信息)就在Oracle数据库中,因此我们不能忽略此工具。


APEX应用架构示例

Oracle REST数据服务(ORDS)是一种数据服务,它基于Java EE替代了Oracle HTTP服务器mod_plsql 。 它通过RESTfull提供与对象的交互

关于詹金斯的一点


也许很多人已经知道它是什么样的动物,但是对于那些只看这个工具的人,我将告诉您它是什么以及我们如何在存储库中使用它。

Jenkins是一个持续集成工具,最常用于开发过程中不同阶段的软件开发和应用程序部署。 简单来说,Jenkins提供了流程自动化环境。 由于其灵活性和大量的插件集,它使得可以集成到任何应用程序或技术中,并支持与不同版本控制系统一起使用。

在我们的数据管理部门的帮助下,通过自动化测试的运行实现了CI / CD流程。 而且,詹金斯(Jenkins)管理着几个自写模块,这使许多手动过程得以自动化。


Jenkins Web客户端界面示例,可单击

误解的问题及其解决方法


在执行了许多任务并使它们自动化之后,我们遇到了一个问题:不仅DevOps工程师和测试专家必须管理这些流程,而且还需要那些没有遇到过此类工具但参与开发过程的人员。 最终用户都是该部门的内部员工。 我认为,Jenkins客户端界面非常简单方便,但是我是通过DevOps来查看的,并不是每个人都能以相同的方式查看它。 由于必须由员工在按钮上执行许多任务,因此有必要提出一个对用户更友好的界面。 实际上,Jenkins有一个名为Blue Ocean的插件,它允许您更改工具的UI表示形式。


Jenkins Web客户端界面示例(Blue Ocean插件),可单击

该插件无法解决我们的问题,但是作为替代,如果标准接口不适合您,则可以重新配置它。 大多数情况下,有必要将模块集成到Jenkins中,反之亦然。 这是要解决的问题的利益。 如我所写,在解决方案时,我们已经有许多使用Oracle APEX编写的应用程序。


APEX应用程序之一的界面示例,可单击

确认其界面足够友好并且可以对其进行管理,并且在Jenkins中启动所有必要任务的所有参数均存储在Oracle数据库中,因此产生了从APEX启动许多Jenkins任务的想法。

花了很多时间。 应用程序之间的交互是根据构建面向服务的系统(如REST)的体系结构原理实现的。 REST体系结构暗含了网络上分布式应用程序组件交互的规则。 APEX-application允许您使用此样式,并提供了一个现成的模板,用于在应用程序开发期间形成发送REST类型的HTTP / HTTPs请求的过程。 结果,我们迅速提升了应用程序以启动此类任务,启动数据开始直接从数据库中提取,并且可以选择它们,从而消除了输入启动参数时出错的可能性。 Jenkins中用于运行任务的参数的传输是通过POST请求进行的,该请求的主体为带有必要参数的JSON。


开发APEX应用程序时的REST调用表单,可单击

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":"."} 


可调用AP的现成APEX应用程序示例,可点击

单击“运行流程”按钮的结果是将参数传输到Jenkins任务并随后启动。 显示成功和失败启动的日志,这些日志直接从Jenkins任务执行过程的控制台返回。 任务本身可以包含任何自动化过程。

最后


我们部门的应用程序数据集成显示了出色的结果。 不再需要强迫不应该直接与Jenkins合作的人员理解该应用程序的工具包。 我们能够使用自定义权限矩阵来区分和保留Jenkins级别对任务执行的控制,从而使用户能够构建任务,但无法编辑任务。

由于该实验被认为是成功的,因此开发思想以编写我们自己的开源框架的形式出现,以简化与Jenkins和与我们一起工作的其他应用程序的交互。 但这是一个完全不同的故事,我将在以后的文章中尝试讲述。

Source: https://habr.com/ru/post/zh-CN455118/


All Articles