Nous travaillons sur une application Web Spring Boot et la base de données que nous utilisons est MySql ;
la configuration que nous avons est que nous la testons d'abord localement (cela signifie que nous devons installer MySql sur notre PC);
puis nous poussons vers Bitbucket ;
Jenkins détecte automatiquement le nouveau push vers Bitbucket et fait une compilation dessus (pour que Jenkins mvn build passe, nous devons également installer MySql sur les machines virtuelles qui exécutent Jenkins).
si la construction de Jenkins réussit, nous transmettons le code à notre application sur OpenShift (en utilisant le plugin de déploiement OpenShift sur Jenkins).
Le problème que nous avons, comme vous l'avez peut-être déjà compris, est que:
dans
application.properties
nous ne pouvons pas coder en dur les informations MySql. Étant donné que notre projet sera exécuté à 3 endroits différents ( local , Jenkins et OpenShift ), nous devons rendre le champ de source de données dynamiqueapplication.properties
(nous savons qu'il existe différentes façons de le faire, mais nous travaillons sur cette solution pour le moment).spring.datasource.url = spring.datasource.username = spring.datasource.password =
La solution que nous avons trouvée est de créer des variables d'environnement système localement et dans la VM Jenkins (en les nommant de la même manière qu'OpenShift les nomme) et en leur attribuant les bonnes valeurs respectivement:
export OPENSHIFT_MYSQL_DB_HOST="jdbc:mysql://localhost"
export OPENSHIFT_MYSQL_DB_PORT="3306"
export OPENSHIFT_MYSQL_DB_USERNAME="root"
export OPENSHIFT_MYSQL_DB_PASSWORD="123asd"
Nous avons fait cela et cela fonctionne. Nous avons également vérifié Map<String, String> env = System.getenv();
que les variables d'environnement peuvent être transformées en variables java en tant que telles:
String password = env.get("OPENSHIFT_MYSQL_DB_PASSWORD");
String userName = env.get("OPENSHIFT_MYSQL_DB_USERNAME");
String sqlURL = env.get("OPENSHIFT_MYSQL_DB_HOST");
String sqlPort = env.get("OPENSHIFT_MYSQL_DB_PORT");
Maintenant, la seule chose qui reste est que nous devons utiliser ces variables java dans notre application.properties
et c'est ce avec quoi nous avons des problèmes.
Dans ce dossier, et comment, avons-nous besoin d'assigner les password
, userName
, sqlURL
et sqlPort
variables pour application.properties
être en mesure de les voir et comment pouvons-nous les inclure dans application.properties
?
Nous avons essayé de nombreuses choses, dont:
spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
Pas de chance pour l'instant. Nous ne mettons probablement pas ces variables d'environnement dans la bonne classe / dossier ou les utilisons de manière incorrecte dans application.properties
.
Votre aide est très appréciée!!
Merci!