Comment j’ai automatisé les migrations de schéma de base de données dans un modèle de base de données multi-locataire | par Amilafonseka | Meilleure programmation | Octobre 2020

Online Coding Courses for Kids

Une fois que cela est fait, les exigences sont modifiées. L’exigence insiste sur le fait que ce processus doit être inclus dans le pipeline Jenkins. J’ai donc supprimé la tâche de la version Gradle et l’ai placée dans le Jenkinsfile.

Si vous ne savez pas déjà ce que Jenkinsfile est, le tutoriel suivant vous donnera un bon aperçu.

Jenkinsfile les usages Sensationnel pour définir ce qui doit être fait dans le pipeline. Vous pouvez définir des étapes dans le Jenkinsfile pour exécuter différents processus. Par exemple, vous pouvez définir une étape pour créer votre code. Ensuite, vous pouvez définir une autre étape pour déployer votre code sur un serveur. Vous pouvez trouver comment faire cela en allant sur le site officiel de Jenkins que j’ai mentionné ci-dessus.

Ma première approche a donc été d’installer Liquibase dans l’instance Linux EC2 où Jenkins s’exécute et d’écrire un script shell pour mettre à jour les schémas de base de données. Mais cela n’a pas pu être fait car cette configuration Jenkins a été créée par un fournisseur tiers et ils ont hésité à me donner le pem fichier pour accéder à l’instance EC2 particulière. Sans accéder via ssh à la machine EC2, j’ai dû trouver un autre moyen d’exécuter Liquibase à partir du Jenkinsfile sans installer Liquibase dans la machine.

Ensuite, j’ai découvert que Liquibase avait sa propre image Docker. Vous pouvez exécuter n’importe quelle commande Liquibase en utilisant son image Docker. Vous devez fournir le changelog fichier et les informations d’identification pour accéder à la base de données. Cela peut être fait pour un PostgreSQL DB comme suit.

La commande ci-dessus permet de monter le à la /liquibase/changelog répertoire à l’intérieur du conteneur Docker et exécute la commande à partir de là.

Maintenant, cela met à jour les modifications pour un schéma. Mais comme mon modèle de base de données est multi-locataire, il doit être exécuté pour chaque schéma. Je devrais parcourir chaque schéma de la base de données. Le problème est de savoir d’où obtenir les schémas et les informations d’identification. Une approche très simple consiste à définir les schémas et les informations d’identification de base de données dans les variables d’environnement dans le Jenkinsfile lui-même. Cependant, conserver les informations d’identification de la base de données à l’air libre n’est pas du tout une bonne pratique. Comme je l’ai mentionné précédemment, je peux facilement stocker ces détails dans AWS Parameter Store.

Ce que vous devez faire est de récupérer ces détails à partir de l’AWS Parameter Store à l’aide de l’AWS CLI, de parcourir les schémas et d’exécuter les migrations de base de données à l’aide de l’image Liquibase Docker pour chaque schéma. Cela peut être fait comme suit en utilisant un script Shell.

L’extrait de code ci-dessus fait partie de la Jenkinsfile. La première étape interrompt le pipeline et demande à l’utilisateur s’il souhaite exécuter les migrations avant d’exécuter les tests unitaires. S’ils confirment qu’ils souhaitent exécuter les migrations, seule la deuxième étape s’exécute. Sinon, la deuxième étape sera ignorée.

La deuxième étape vérifie si l’utilisateur souhaite exécuter les migrations de base de données et exécute le script Shell en conséquence. En cela, ce que le withAWS l’attribut est qu’il se connecte au compte AWS particulier à l’aide des informations d’identification. Ensuite, à l’aide de l’AWS CLI, il récupère la liste de schémas, le nom d’utilisateur et le mot de passe à partir de l’AWS Parameter Store.

Ensuite, il parcourt la liste des schémas et exécute le liquibase update commande contre chaque schéma.

Vous pouvez vérifier si les mises à jour ont été correctement exécutées en consultant le databasechangelog une fois le processus terminé.

Il s’agit d’une façon d’automatiser les migrations de base de données dans votre modèle de base de données multi-tenant. Il existe peut-être d’autres moyens plus efficaces de le faire. Peut-être que Liquibase n’est pas une bonne solution pour cela. Veuillez me faire part de vos suggestions et réflexions à ce sujet dans la section Commentaires. Je pense que cela pourrait aider quelqu’un d’une certaine manière.

Enfin, puisque c’est mon premier article sur Medium, il peut y avoir beaucoup de choses que je devrais encore apprendre. J’espère écrire plus d’articles comme celui-ci à l’avenir, et vos pensées à ce sujet seraient inestimables.

Merci d’avoir lu!

Close Menu