Estamos trabajando en una aplicación web Spring Boot y la base de datos que estamos usando es MySql ;
la configuración que tenemos es que primero lo probamos localmente (significa que necesitamos instalar MySql en nuestra PC);
luego empujamos a Bitbucket ;
Jenkins detecta automáticamente el nuevo impulso a Bitbucket y lo construye (para que pase la compilación mvn de Jenkins también necesitamos instalar MySql en las máquinas virtuales que ejecutan Jenkins).
Si la compilación de Jenkins pasa, enviamos el código a nuestra aplicación en OpenShift (usando el complemento de implementación Openshift en Jenkins).
El problema que tenemos, ya que es posible que ya lo haya resuelto, es que:
en
application.properties
no podemos codificar la información de MySql. Dado que nuestro proyecto se ejecutará en 3 lugares diferentes ( local , Jenkins y OpenShift ), necesitamos que el campo del origen de datos sea dinámicoapplication.properties
(sabemos que hay diferentes formas de hacerlo, pero estamos trabajando en esta solución por ahora).spring.datasource.url = spring.datasource.username = spring.datasource.password =
La solución que se nos ocurrió es que creamos variables de entorno del sistema localmente y en la máquina virtual de Jenkins (nombrándolas de la misma manera que OpenShift las nombra) y asignándoles los valores correctos, respectivamente:
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"
Hemos hecho esto y funciona. También hemos comprobado Map<String, String> env = System.getenv();
que las variables de entorno se pueden convertir en variables java como tales:
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");
Ahora lo único que queda es que necesitamos usar estas variables de Java en nuestro application.properties
y eso es con lo que estamos teniendo problemas.
En el que la carpeta, y cómo, qué necesitamos para asignar los password
, userName
, sqlURL
, y sqlPort
variables para application.properties
poder verlos y cómo podemos incluirlos en application.properties
?
Hemos probado muchas cosas, una de ellas es:
spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
Sin suerte hasta ahora. Probablemente no estamos colocando estas variables env en la clase / carpeta correcta o las estamos usando incorrectamente application.properties
.
¡¡Tu ayuda es altamente apreciada!!
¡Gracias!