私たちはSpring Boot Webアプリに取り組んでおり、使用しているデータベースはMySqlです。
私たちの設定は、最初にローカルでテストすることです(つまり、PCにMySqlをインストールする必要があります)。
次に、Bitbucketにプッシュします。
JenkinsはBitbucketへの新しいプッシュを自動的に検出し、それに基づいてビルドを実行します(Jenkins mvn buildをパスするには、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
?
私たちはそれらの1つである多くのことを試みました:
spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
これまでのところ運がありません。これらの環境変数を適切なクラス/フォルダに配置していないか、でそれらを誤って使用している可能性がありapplication.properties
ます。
あなたの助けは大歓迎です!!
ありがとう!