Pracujemy nad aplikacją sieciową Spring Boot, a używaną przez nas bazą danych jest MySql ;
konfiguracja, którą mamy, to najpierw testujemy ją lokalnie (oznacza to, że musimy zainstalować MySql na naszym komputerze);
następnie naciskamy na Bitbucket ;
Jenkins automatycznie wykrywa nowy push do Bitbucket i wykonuje na nim kompilację (aby kompilacja Jenkins mvn przebiegła pomyślnie, musimy również zainstalować MySql na maszynach wirtualnych, na których działa Jenkins).
jeśli kompilacja Jenkins przejdzie pomyślnie, wypychamy kod do naszej aplikacji na OpenShift (używając wtyczki wdrażania Openshift na Jenkins).
Problem, który, jak zapewne już wymyśliliście, polega na tym, że:
w
application.properties
nie możemy na stałe zakodować informacji MySql. Ponieważ nasz projekt będzie działał w 3 różnych miejscach ( lokalny , Jenkins i OpenShift ), musimy dynamizować pole źródła danychapplication.properties
(wiemy, że istnieją różne sposoby, ale na razie pracujemy nad tym rozwiązaniem).spring.datasource.url = spring.datasource.username = spring.datasource.password =
Opracowane przez nas rozwiązanie polega na tym, że tworzymy systemowe zmienne środowiskowe lokalnie oraz w vm Jenkinsa (nazywając je w ten sam sposób, w jaki OpenShift je nazywa) i przypisując im odpowiednio wartości:
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"
Zrobiliśmy to i działa. Sprawdziliśmy również, czy Map<String, String> env = System.getenv();
zmienne środowiskowe można przekształcić w zmienne Java jako takie:
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");
Teraz pozostaje nam tylko użyć tych zmiennych java application.properties
i właśnie z tym mamy problem.
W którym folderze i jak, musimy przypisać password
, userName
, sqlURL
oraz sqlPort
zmienne dla application.properties
aby móc je zobaczyć i jak możemy włączyć je application.properties
?
Próbowaliśmy wielu rzeczy, jedną z nich jest:
spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
Jak dotąd brak szczęścia. Prawdopodobnie nie umieszczamy tych zmiennych env we właściwej klasie / folderze lub używamy ich niepoprawnie application.properties
.
Twoja pomoc jest bardzo ceniona !!
Dzięki!