Estamos trabalhando em um aplicativo Web Spring Boot e o banco de dados que estamos usando é MySql ;
a configuração que temos é primeiro testá-lo localmente (significa que precisamos instalar o MySql no nosso PC);
então nós empurramos para Bitbucket ;
Jenkins detecta automaticamente o novo envio para o Bitbucket e faz uma compilação (para o Jenkins mvn build passar, também precisamos instalar o MySql nas máquinas virtuais que estão executando o Jenkins).
se a construção do Jenkins for aprovada, enviaremos o código para o nosso aplicativo no OpenShift (usando o plug-in de implantação Openshift no Jenkins).
O problema que temos como você já deve ter percebido é que:
em
application.properties
que não podemos duro código a informação MySql. Como nosso projeto será executado em 3 locais diferentes ( local , Jenkins e OpenShift ), precisamos dinamizar o campo da fonte de dadosapplication.properties
(sabemos que existem maneiras diferentes de fazê-lo, mas estamos trabalhando nessa solução por enquanto).spring.datasource.url = spring.datasource.username = spring.datasource.password =
A solução que criamos é criar variáveis de ambiente do sistema localmente e no Jenkins vm (nomeando-as da mesma maneira que o OpenShift os nomeia) e atribuindo-lhes os valores corretos, 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"
Fizemos isso e funciona. Também verificamos se Map<String, String> env = System.getenv();
as variáveis de ambiente podem ser transformadas em variáveis java da seguinte forma:
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");
Agora, a única coisa que resta é que precisamos usar essas variáveis java em nossa application.properties
e é com isso que estamos tendo problemas.
Em que pasta, e como, não é necessário atribuir os password
, userName
, sqlURL
, e sqlPort
variáveis paraapplication.properties
ser capaz de vê-los e como é que vamos incluí-los em application.properties
?
Tentamos muitas coisas, sendo uma delas:
spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
Sem sorte até agora. Provavelmente, não estamos colocando essas variáveis env na classe / pasta correta ou as estamos usando incorretamenteapplication.properties
.
Sua ajuda é muito apreciada!!
Obrigado!