Para o futuro com a integração de serviços Jenkins e Oracle APEX

No processo de gerenciar grandes quantidades de dados e sua visualização, estamos cada vez mais confrontados com a necessidade de introduzir uma única ferramenta para acessar o gerenciamento funcional no repositório. Além disso, essa ferramenta deve ser igualmente conveniente e compreensível para todos os funcionários da divisão de gerenciamento de dados: administradores, analistas, desenvolvedores e testadores.



Meu nome é Vitaliy, sou responsável na Rostelecom pela direção de testes de automação e implementação de processos de DevOps. Neste artigo, falarei sobre uma solução interessante para esse problema em um grande data warehouse da Rostelecom.

E foi assim que chegamos a esse conjunto de ferramentas para resolver esse problema.

Para começar, um pouco de fundo. Escrevi anteriormente que escrevemos nosso próprio módulo em Python para automatizar o processo de instalação de objetos em um data warehouse. É controlado pelo Jenkins e permite que você inicie a funcionalidade necessária manualmente, por um botão com a entrada dos parâmetros de inicialização necessários, ou totalmente automaticamente dentro do cronograma, sem intervenção do usuário. Além disso, nossa empresa já implementou vários aplicativos escritos usando o Oracle APEX.

O que é o Oracle Application Express (Oracle APEX)?


Oracle APEX - nas versões anteriores do aplicativo, chamava-se HTML DB. Usando esta ferramenta, usando apenas um navegador e tendo experiência em programação em linguagens como PL / SQL e JavaScript, você pode desenvolver aplicativos da Web rápidos, escaláveis ​​e seguros que podem ser facilmente implantados em qualquer circuito para desenvolvimento, teste e subsequente implementação na produção .

Para criar um formulário de entrada de dados, não há necessidade de programar a interface de maneira complexa. O aplicativo possui muitos modelos prontos que podem ser reutilizados para desenvolver sua própria solução. Os usuários finais também obtêm acesso ao aplicativo por meio de um navegador, eliminando a necessidade de instalar o aplicativo em um computador. E com todas as vantagens acima, os metadados (informações sobre os dados usados) em nosso repositório estão no banco de dados Oracle, portanto, não podemos ignorar essa ferramenta.


Exemplo de arquitetura de aplicativos APEX

O Oracle REST Data Services (ORDS) é um serviço de dados que substitui o servidor HTTP Oracle e o mod_plsql com base no Java EE . Ele fornece interação com objetos por meio de RESTfull.

Um pouco sobre Jenkins


Muitos provavelmente já sabem que tipo de animal é esse, mas para aqueles que estão apenas olhando para essa ferramenta, vou lhe dizer o que é e como os usamos em nosso repositório.

Jenkins é uma ferramenta de integração contínua, usada com mais freqüência para desenvolvimento de software e implantação de aplicativos em diferentes estágios do processo de desenvolvimento. Em termos simples, o Jenkins fornece um ambiente de automação de processos. Devido à sua flexibilidade e a um amplo conjunto de plug-ins, possibilita a integração em qualquer aplicativo ou tecnologia e suporta o trabalho com diferentes sistemas de controle de versão.

Em nosso departamento de gerenciamento de dados, com sua ajuda, são implementados processos de CI / CD com a execução de testes automatizados. E Jenkins gerencia vários módulos auto-escritos, graças aos quais muitos processos manuais são automatizados.


Exemplo de interface do cliente da Web Jenkins, clicável

O problema do mal-entendido e sua solução


Depois de implementar muitas tarefas e automatizá-las, encontramos um problema: não apenas os engenheiros e especialistas em testes do DevOps precisarão gerenciar esses processos, mas também as pessoas que não encontram essas ferramentas, mas estão envolvidos no processo de desenvolvimento. Os usuários finais eram todos funcionários internos do departamento. A interface do cliente Jenkins, na minha opinião, é bastante simples e conveniente, mas eu a olho pelos olhos do DevOps, e nem todos podem olhar da mesma maneira. Como várias tarefas que tivemos que executar no botão pelos funcionários, tornou-se necessário criar uma interface mais amigável para o usuário. De fato, existe um plugin para Jenkins chamado Blue Ocean , que permite alterar a representação da interface do usuário da ferramenta.


Exemplo de interface do cliente da Web Jenkins (plug-in Blue Ocean), clicável

Este plug-in não conseguiu resolver o nosso problema, mas como alternativa, se a interface padrão não se adequar a você, você pode reconfigurá-lo. Na maioria das vezes, torna-se necessário integrar o módulo no Jenkins, e não vice-versa. Esse é o interesse do problema que está sendo resolvido. No momento da sua solução, como escrevi, já tínhamos vários aplicativos escritos usando o Oracle APEX.


Exemplo de interface de um dos aplicativos APEX, clicável

Tendo verificado que sua interface é amigável o suficiente e é possível gerenciá-la, e todos os parâmetros para iniciar as tarefas necessárias no Jenkins são armazenados no banco de dados Oracle, surgiu a idéia de lançar várias tarefas do Jenkins a partir do APEX.

Demorou um pouco de tempo. A interação entre os aplicativos foi implementada de acordo com o princípio arquitetural da construção de sistemas orientados a serviços, como o REST. A arquitetura REST implica as regras para a interação de componentes de um aplicativo distribuído na rede. O aplicativo APEX permite usar esse estilo e fornece um modelo pronto para a formação do processo de envio de solicitações HTTP / HTTPs do tipo REST durante o desenvolvimento do aplicativo. Como resultado, rapidamente levantamos o aplicativo para iniciar essas tarefas, os dados para lançamento começaram a ser extraídos diretamente do banco de dados com a possibilidade de sua seleção, o que eliminou a possibilidade de um erro ao inserir os parâmetros de inicialização. A transmissão de parâmetros para a execução de tarefas no Jenkins é realizada por meio de uma solicitação POST, no corpo do qual JSON está com os parâmetros necessários.


Formulário de chamada REST ao desenvolver um aplicativo APEX, clicável

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


Um exemplo de aplicativo APEX pronto para chamar processos Jenkins, clicável

O resultado de clicar no botão "Executar o processo" será a transferência de parâmetros para a tarefa Jenkins e seu lançamento subsequente. Registros exibidos de ativações com e sem êxito, retornados diretamente do console do processo de execução de tarefas do Jenkins. A tarefa em si pode conter qualquer processo automatizado.

No final


A integração de dados de aplicativos em nosso departamento mostrou um excelente resultado. Não é mais necessário forçar as pessoas que não devem trabalhar diretamente com Jenkins a entender o kit de ferramentas do aplicativo. Conseguimos diferenciar e deixar o controle sobre a execução de tarefas no nível Jenkins usando uma matriz de direitos personalizados, para que os usuários pudessem criar tarefas, mas não pudessem editá-las.

Como esse experimento foi reconhecido como bem-sucedido, as idéias de desenvolvimento apareceram na forma de escrever nossas próprias estruturas de código aberto para simplificar a interação com Jenkins e outros aplicativos que trabalham conosco. Mas essa é uma história completamente diferente, que tentarei contar em artigos futuros.

Source: https://habr.com/ru/post/pt455118/


All Articles