Мы работаем над веб-приложением 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
.
Ваша помощь высоко ценится!
Спасибо!