Bir Spring Boot web uygulaması üzerinde çalışıyoruz ve kullandığımız veritabanı MySql ;
Sahip olduğumuz kurulum ilk olarak test etmemiz yerel olarak etmemizdir (PC'ye MySql yüklememiz gerektiği anlamına gelir);
sonra iteriz Bitbucket'e geçiyoruz ;
Jenkins otomatik olarak Bitbucket'e yeni bir itme algılar ve üzerinde bir yapı oluşturur (Jenkins mvn derlemesinin geçmesi için MySql'i Jenkins çalıştıran sanal makinelere de yüklememiz gerekir).
Jenkins derleme geçerse kodu OpenShift'teki uygulamamıza aktarırız (Jenkins üzerindeki Openhift dağıtım eklentisini kullanarak).
Sahip olduğumuz problem önce çözmüş olabileceğiniz gibi :
içinde
application.properties
MySql bilgilerini kodlayamıyoruz. Projemiz 3 farklı yerde ( yerel , Jenkins ve OpenShift ) çalışacağından , veri kaynağı alanını dinamik hale getirmeliyizapplication.properties
(bunu yapmanın farklı yolları olduğunu biliyoruz, ancak şimdilik bu çözüm üzerinde çalışıyoruz).spring.datasource.url = spring.datasource.username = spring.datasource.password =
Ortaya koyduğumuz çözüm, sistem ortamı değişkenlerini yerel olarak ve Jenkins vm'de (bunları OpenShift ile aynı şekilde adlandırır) ve sırasıyla doğru değerleri atamamızdır:
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"
Bunu yaptık ve işe yarıyor. Ayrıca Map<String, String> env = System.getenv();
, ortam değişkenlerinin java değişkenlerine dönüştürülebildiğini kontrol ettik :
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");
Şimdi geriye kalan tek şey bu java değişkenlerini application.properties
ve sorunumuz da budur.
Hangi klasörde ve nasıl, biz atamak gerekiyor password
, userName
, sqlURL
, ve sqlPort
için değişkenler application.properties
onları görmek mümkün ve biz onları nasıl eklerimapplication.properties
?
Bunlardan biri olan birçok şeyi denedik:
spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
Şimdiye kadar şans yok. Muhtemelen bu env değişkenlerini doğru sınıfa / klasöre koymuyoruz ya da yanlış kullanıyoruz application.properties
.
Yardımlarınız çok takdir !!
Teşekkürler!