Мы работаем над веб-приложением Spring Boot , и база данных, которую мы используем, - MySql ;
у нас есть настройки, которые мы сначала тестируем локально (значит, нам нужно установить MySql на наш ПК);
затем мы нажимаем на Bitbucket ;
Jenkins автоматически обнаруживает новый push-запрос к Bitbucket и выполняет сборку на нем (для того, чтобы передать Jenkins mvn build, нам также нужно установить MySql на виртуальные машины, на которых работает Jenkins).
если сборка Jenkins проходит успешно, мы отправляем код в наше приложение в OpenShift (используя плагин развертывания Openshift в Jenkins).
Проблема, которую мы имеем, как вы, возможно, уже поняли, заключается в том, что:
в
application.properties
мы можем не трудно кодировать информацию MySql. Поскольку наш проект будет выполняться в 3 разных местах ( локальном , Jenkins и OpenShift ), нам нужно сделать поле источника данных динамичнымapplication.properties
(мы знаем, что есть разные способы сделать это, но мы сейчас работаем над этим решением).spring.datasource.url = spring.datasource.username = spring.datasource.password =
Решение, которое мы придумали, заключается в том, что мы создаем системные переменные среды локально и в Jenkins vm (называя их так же, как их называет OpenShift) и присваивая им правильные значения соответственно:
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"
Мы сделали это, и это работает. Мы также проверили, Map<String, String> env = System.getenv();
что переменные окружения могут быть преобразованы в переменные Java как таковые:
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");
Теперь осталось только использовать эти переменные java в нашем, application.properties
и это то, с чем у нас проблемы.
В какой папке, и как нам нужно назначить password
, userName
, sqlURL
и sqlPort
переменные , application.properties
чтобы иметь возможность видеть их и как мы включаем их в application.properties
?
Мы перепробовали много вещей, одна из которых:
spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
Пока не повезло. Вероятно, мы не помещаем эти переменные env в нужный класс / папку или используем их неправильно application.properties
.
Ваша помощь высоко ценится!
Спасибо!