Vers l'avenir avec l'intégration des services Jenkins et Oracle APEX

Dans le processus de gestion de grandes quantités de données et de leur visualisation, nous sommes de plus en plus confrontés à la nécessité d'introduire un outil unique d'accès à la gestion fonctionnelle dans le référentiel. De plus, cet outil doit être également pratique et compréhensible pour tous les employés de la division de gestion des données: administrateurs, analystes, développeurs et testeurs.



Je m'appelle Vitaliy, je suis responsable à Rostelecom de la direction des tests d'automatisation et de mise en œuvre des processus DevOps. Dans cet article, je vais parler d'une solution intéressante à ce problème dans un grand entrepôt de données de Rostelecom.

Et c'est ainsi que nous sommes arrivés à un tel ensemble d'outils pour résoudre ce problème.

Pour commencer, un peu de fond. Plus tôt, j'ai écrit que nous avions écrit notre propre module en Python pour automatiser le processus d'installation d'objets dans un entrepôt de données. Il est contrôlé par Jenkins et vous permet de démarrer les fonctionnalités nécessaires soit manuellement par un bouton avec la saisie des paramètres de démarrage nécessaires, soit entièrement automatiquement selon un planning sans intervention de l'utilisateur. De plus, notre entreprise a déjà implémenté un certain nombre d'applications écrites à l'aide d'Oracle APEX.

Qu'est-ce qu'Oracle Application Express (Oracle APEX)?


Oracle APEX - dans les versions antérieures de l'application s'appelait HTML DB. En utilisant cet outil, en utilisant uniquement un navigateur et en ayant une expérience de programmation dans des langages tels que PL / SQL et JavaScript, vous pouvez développer des applications Web rapides, évolutives et sécurisées qui peuvent être facilement déployées sur n'importe quel circuit pour le développement, les tests et la mise en œuvre ultérieure en production .

Pour créer un formulaire de saisie de données, il n'est pas nécessaire de programmer l'interface de manière complexe. L'application dispose de nombreux modèles prêts à l'emploi qui peuvent être réutilisés pour développer votre propre solution. Les utilisateurs finaux ont également accès à l'application via un navigateur, éliminant ainsi la nécessité d'installer l'application sur un ordinateur. Et avec tous les avantages ci-dessus, les métadonnées (informations sur les données utilisées) dans notre référentiel se trouvent dans la base de données Oracle, nous ne pouvions donc pas ignorer cet outil.


Exemple d'architecture d'application APEX

Oracle REST Data Services (ORDS) est un service de données qui remplace le serveur Oracle HTTP et mod_plsql basé sur Java EE . Il fournit une interaction avec les objets via RESTfull.

Un peu sur Jenkins


Beaucoup, probablement, savent déjà de quel genre de bête il s'agit, mais pour ceux qui ne font que regarder cet outil, je vais vous dire de quoi il s'agit et comment nous l'utilisons dans notre référentiel.

Jenkins est un outil d'intégration continue, le plus souvent utilisé pour le développement de logiciels et le déploiement d'applications à différentes étapes du processus de développement. En termes simples, Jenkins fournit un environnement d'automatisation des processus. En raison de sa flexibilité et d'un large éventail de plug-ins, il permet de s'intégrer dans n'importe quelle application ou technologie et prend en charge le travail avec différents systèmes de contrôle de version.

Dans notre département de gestion des données avec son aide, des processus CI / CD avec l'exécution de tests automatisés sont mis en œuvre. Et Jenkins gère plusieurs modules auto-écrits, grâce auxquels de nombreux processus manuels sont automatisés.


Exemple d'interface client Web Jenkins, cliquable

Le problème des malentendus et sa solution


Après avoir implémenté de nombreuses tâches et les automatiser, nous avons rencontré un problème: non seulement les ingénieurs DevOps et les spécialistes des tests devront gérer ces processus, mais aussi les personnes qui ne rencontrent pas de tels outils, mais sont impliquées dans le processus de développement. Les utilisateurs finaux étaient tous des employés internes du département. L'interface client Jenkins, à mon avis, est assez simple et pratique, mais je la regarde à travers les yeux de DevOps, et tout le monde ne peut pas la regarder de la même manière. Étant donné qu'un certain nombre de tâches que nous avons dû exécuter sur le bouton par les employés, il est devenu nécessaire de proposer une interface plus conviviale pour l'utilisateur. En fait, il existe un plugin pour Jenkins appelé Blue Ocean , qui vous permet de modifier la représentation de l'interface utilisateur de l'outil.


Exemple d'interface client Web Jenkins (plugin Blue Ocean), cliquable

Ce plugin n'a pas pu résoudre notre problème, mais comme alternative, si l'interface standard ne vous convient pas, vous pouvez le reconfigurer. Le plus souvent, il devient nécessaire d'intégrer le module dans Jenkins, et non l'inverse. C'est l'intérêt de la résolution du problème. Au moment de sa solution, comme je l'ai écrit, nous avions déjà un certain nombre d'applications écrites à l'aide d'Oracle APEX.


Exemple d'interface d'une des applications APEX, cliquable

Après avoir vérifié que son interface est suffisamment conviviale et qu'il est possible de la gérer, et que tous les paramètres pour lancer les tâches nécessaires dans Jenkins sont stockés dans la base de données Oracle, l'idée est née de lancer un certain nombre de tâches Jenkins depuis APEX.

Cela a pris pas mal de temps. L'interaction entre les applications a été mise en œuvre selon le principe architectural de la construction de systèmes orientés services tels que REST. L'architecture REST implique les règles d'interaction des composants d'une application distribuée sur le réseau. L'application APEX vous permet d'utiliser ce style et fournit un modèle prêt à l'emploi pour la formation du processus d'envoi de requêtes HTTP / HTTPs de type REST pendant le développement de l'application. En conséquence, nous avons rapidement levé l'application pour lancer de telles tâches, les données pour le lancement ont commencé à être extraites directement de la base de données avec la possibilité de leur sélection, ce qui a éliminé la possibilité d'une erreur dans la saisie des paramètres de démarrage. La transmission des paramètres pour l'exécution des tâches dans Jenkins est effectuée au moyen d'une requête POST, dans le corps de laquelle se trouve JSON avec les paramètres nécessaires.


Formulaire d'appel REST lors du développement d'une application APEX, cliquable

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


Un exemple d'une application APEX prĂŞte Ă  l'emploi pour invoquer des processus Jenkins, cliquable

Le résultat du clic sur le bouton «Exécuter le processus» sera le transfert des paramètres à la tâche Jenkins et son lancement ultérieur. Journaux affichés des lancements réussis et infructueux, qui sont directement renvoyés depuis la console du processus d'exécution de la tâche Jenkins. La tâche elle-même peut contenir n'importe quel processus automatisé.

En fin de compte


L'intégration des données d'application dans notre département a montré un excellent résultat. Il n'est plus nécessaire de forcer les personnes qui ne devraient pas travailler directement avec Jenkins à comprendre la boîte à outils de l'application. Nous avons pu différencier et laisser le contrôle sur l'exécution des tâches au niveau Jenkins en utilisant une matrice de droits personnalisée afin que les utilisateurs aient la possibilité de créer des tâches, mais il n'y avait aucune possibilité de la modifier.

Depuis que cette expérience a été reconnue comme réussie, les idées de développement sont apparues sous la forme d'écrire nos propres frameworks open source pour simplifier l'interaction avec Jenkins et d'autres applications qui travaillent avec nous. Mais c'est une histoire complètement différente, que j'essaierai de raconter dans de futurs articles.

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


All Articles