우리는 스프링 부트 웹앱을 개발 하고 있으며 우리가 사용하는 데이터베이스는 MySql이다 ;
우리가 가지고있는 설정은 먼저 로컬에서 테스트하는 것입니다 (PC에 MySql을 설치해야 함을 의미합니다).
그런 다음 Bitbucket으로 푸시합니다 .
Jenkins 는 Bitbucket에 대한 새로운 푸시를 자동으로 감지하고 빌드를 수행합니다 (Jenkins mvn 빌드가 통과하려면 Jenkins를 실행하는 가상 머신에 MySql도 설치해야 함).
Jenkins 빌드가 패스되면 OpenShift 의 응용 프로그램으로 코드를 푸시합니다 (Jenkins의 Openshift 배포 플러그인 사용).
우리가 이미 이해했을 수도있는 문제 는 다음과 같습니다.
에서와
application.properties
우리가하지 하드 코드 MySQL의 정보를 할 수 있습니다. 우리 프로젝트는 3 개의 다른 장소 ( local , 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
.
도와 주셔서 감사합니다 !!
감사!