Chúng tôi đang làm việc trên một ứng dụng web Spring Boot và cơ sở dữ liệu chúng tôi đang sử dụng là MySql ;
thiết lập mà chúng tôi có là trước tiên chúng tôi kiểm tra nó cục bộ (có nghĩa là chúng tôi cần cài đặt MySql trên PC của chúng tôi);
sau đó chúng tôi đẩy sang Bitbucket ;
Jenkins tự động phát hiện lần đẩy mới tới Bitbucket và thực hiện việc xây dựng nó (để Jenkins mvn xây dựng để vượt qua, chúng ta cũng cần cài đặt MySql trên các máy ảo đang chạy Jenkins).
nếu bản dựng Jenkins vượt qua, chúng tôi sẽ đẩy mã vào ứng dụng của mình trên OpenShift (sử dụng plugin triển khai Openshift trên Jenkins).
Vấn đề chúng tôi gặp phải như bạn có thể đã nhận ra đó là:
trong
application.properties
chúng tôi không thể mã cứng thông tin MySql. Vì dự án của chúng tôi sẽ chạy ở 3 nơi khác nhau ( cục bộ , Jenkins và OpenShift ), chúng tôi cần làm cho trường nguồn dữ liệu độngapplication.properties
(chúng tôi biết có nhiều cách khác nhau để thực hiện nhưng hiện tại chúng tôi đang nghiên cứu giải pháp này).spring.datasource.url = spring.datasource.username = spring.datasource.password =
Giải pháp chúng tôi đưa ra là chúng tôi tạo các biến môi trường hệ thống cục bộ và trong vm Jenkins (đặt tên chúng theo cách giống như OpenShift đặt tên cho chúng) và gán cho chúng các giá trị đúng tương ứng:
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"
Chúng tôi đã làm điều này và nó hoạt động. Chúng tôi cũng đã kiểm tra Map<String, String> env = System.getenv();
rằng các biến môi trường có thể được tạo thành các biến java như sau:
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");
Bây giờ điều duy nhất còn lại là chúng ta cần sử dụng các biến java này trong application.properties
đó và đó là điều chúng ta đang gặp rắc rối.
Trong đó thư mục, và làm thế nào, chúng ta cần gán password
, userName
, sqlURL
, và sqlPort
các biến cho application.properties
để có thể nhìn thấy chúng và làm thế nào để chúng ta đưa vào application.properties
?
Chúng tôi đã thử nhiều thứ mà một trong số chúng là:
spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
Không có may mắn cho đến nay. Chúng tôi có thể không đặt các biến env này vào đúng lớp / thư mục hoặc đang sử dụng chúng không chính xác application.properties
.
Giúp đỡ của bạn được đánh giá cao!!
Cảm ơn!