Stiamo lavorando su un'app Web Spring Boot e il database che stiamo utilizzando è MySql ;
la configurazione che abbiamo è prima testarla localmente (significa che dobbiamo installare MySql sul nostro PC);
quindi passiamo a Bitbucket ;
Jenkins rileva automaticamente la nuova spinta su Bitbucket e crea una build su di essa (per far passare Jenkins mvn build dobbiamo anche installare MySql sulle macchine virtuali che eseguono Jenkins).
se la build Jenkins passa, inviamo il codice alla nostra applicazione su OpenShift (usando il plug-in di distribuzione Openshift su Jenkins).
Il problema che abbiamo come potresti aver già capito è che:
in
application.properties
non è possibile codificare le informazioni di MySql. Poiché il nostro progetto verrà eseguito in 3 luoghi diversi ( locale , Jenkins e OpenShift ), dobbiamo rendere dinamico il campo dell'origine datiapplication.properties
(sappiamo che ci sono diversi modi per farlo, ma per ora stiamo lavorando su questa soluzione).spring.datasource.url = spring.datasource.username = spring.datasource.password =
La soluzione che abbiamo trovato è creare variabili di ambiente di sistema localmente e in Jenkins vm (nominandole nello stesso modo in cui OpenShift le nomina) e assegnando loro i valori giusti rispettivamente:
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"
L'abbiamo fatto e funziona. Abbiamo anche verificato Map<String, String> env = System.getenv();
che le variabili di ambiente possano essere trasformate in variabili java in quanto tali:
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");
Ora l'unica cosa rimasta è che dobbiamo usare queste variabili java nelle nostre application.properties
e questo è ciò con cui abbiamo problemi.
In quale cartella, e in che modo, abbiamo bisogno di assegnare i password
, userName
, sqlURL
, e sqlPort
variabili per application.properties
essere in grado di vederli e come possiamo includerli nella application.properties
?
Abbiamo provato molte cose, una delle quali è:
spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
Nessuna fortuna finora. Probabilmente non inseriremo queste variabili env nella giusta classe / cartella o le stiamo usando in modo errato application.properties
.
Il tuo aiuto è molto apprezzato !!
Grazie!