私たちは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ます。
あなたの助けは大歓迎です!!
ありがとう!