Wir arbeiten an einer Spring Boot- Webanwendung und die von uns verwendete Datenbank ist MySql .
Das Setup, das wir haben, ist, dass wir es zuerst lokal testen (bedeutet, dass wir MySql auf unserem PC installieren müssen);
dann drängen wir zu Bitbucket ;
Jenkins erkennt den neuen Push an Bitbucket automatisch und baut darauf auf (damit der Jenkins-MVN-Build erfolgreich ist, muss MySql auch auf den virtuellen Maschinen installiert werden, auf denen Jenkins ausgeführt wird).
Wenn Jenkins Builds erfolgreich sind , senden wir den Code unter OpenShift an unsere Anwendung (mithilfe des Openshift-Bereitstellungs-Plugins unter Jenkins).
Das Problem, das wir haben, wie Sie vielleicht bereits herausgefunden haben, ist das:
In können
application.properties
wir die MySQL-Informationen nicht hart codieren. Da unser Projekt an drei verschiedenen Orten ausgeführt wird ( lokal , Jenkins und OpenShift ), müssen wir das Datenquellenfeld dynamisch gestaltenapplication.properties
(wir wissen, dass es verschiedene Möglichkeiten gibt, dies zu tun, aber wir arbeiten derzeit an dieser Lösung).spring.datasource.url = spring.datasource.username = spring.datasource.password =
Die Lösung, die wir gefunden haben, besteht darin , Systemumgebungsvariablen lokal und in der Jenkins-VM zu erstellen (sie so zu benennen, wie OpenShift sie benennt) und ihnen jeweils die richtigen Werte zuzuweisen:
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"
Wir haben das getan und es funktioniert. Wir haben auch überprüft, Map<String, String> env = System.getenv();
ob die Umgebungsvariablen als solche in Java-Variablen umgewandelt werden können:
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");
Jetzt müssen wir nur noch diese Java-Variablen in unserem verwenden, application.properties
und damit haben wir Probleme.
In welchem Ordner und wie tun müssen wir die zuweisen password
, userName
, sqlURL
, und sqlPort
Variablen für application.properties
Lage sein , sie zu sehen , und wie sind wir sie in application.properties
?
Wir haben viele Dinge ausprobiert, darunter:
spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
Bisher kein Glück. Wir legen diese env-Variablen wahrscheinlich nicht in der richtigen Klasse / im richtigen Ordner ab oder verwenden sie falsch in application.properties
.
Ihre Hilfe wird sehr geschätzt!!
Vielen Dank!