Bitbucket
にWercker
にbuild
するように
Database
のport
がJunit
の
実行できるように、postgress
、mongoDb
を
設定の
使用ライブラリに ついて
以下、
これらの
- eclipselink 2.6.3
- guice 4.0
- mongo-java-driver 3.2.2
Wercker
の 環境変数の 説明
まず、Wercker
の
wercker.yml
でservices
の
wercker.yml
の抜粋 services: - id: mongo - id: postgres env: POSTGRES_USER: $PSQL_USER POSTGRES_PASSWORD: $PSQL_PASSWORD
ドキュメントへの
リンク
テストクラスにWercker
テスト実行すると、
@BeforeClass public static void setUpClass() { System.out.println("---------------------------------------"); System.out.println("System.getenv()"); System.out.println("-----------"); System.getenv().keySet().stream().forEach((key) -> { String value = System.getenv((String) key); System.out.println(key + "=" + value); }); }
以下のようなMongoDB
、POSTGRES
関連の
これらのpom.xml
上で
Wercker
上で
CI=true MONGO_ENV_GPG_KEYS=XXXXXXXXXXXX XXXXXXXXXXXXXXX MONGO_ENV_MONGO_MAJOR=3.2 MONGO_ENV_MONGO_VERSION=3.2.6 MONGO_NAME=/wercker-pipeline-XXXXXXXX/mongo MONGO_PORT=tcp://172.XXX.XXX.XXX:27017 MONGO_PORT_27017_TCP=tcp://172.XXX.XXX.XXX:27017 MONGO_PORT_27017_TCP_ADDR=172.XXX.XXX.XXX MONGO_PORT_27017_TCP_PORT=27017 POSTGRES_ENV_GOSU_VERSION=1.7 POSTGRES_ENV_LANG=en_US.utf8 POSTGRES_ENV_PG_MAJOR=9.5 POSTGRES_ENV_PG_VERSION=9.5.3-1.pgdg80+1 POSTGRES_ENV_PGDATA=/var/lib/postgresql/data POSTGRES_ENV_POSTGRES_PASSWORD=XXXXXXXXXX POSTGRES_ENV_POSTGRES_USER=festival4partypeople POSTGRES_NAME=/wercker-pipeline-XXXXXXXX/postgres POSTGRES_PORT=tcp://172.XXX.XXX.XXX:5432 POSTGRES_PORT_5432_TCP=tcp://172.XXX.XXX.XXX:5432 POSTGRES_PORT_5432_TCP_ADDR=172.XXX.XXX.XXX POSTGRES_PORT_5432_TCP_PORT=5432 POSTGRES_PORT_5432_TCP_PROTO=tcp WERCKER=true
pom.xml
に、profile
LOCAL
と、WERCKER
を 追加
maven-resources-plugin
と、
Wercker
上の
profile
でのmaven-resources-plugin
を
各種設定ファイルに、
参考サイト
pom.xml
に指定した profile
Local
をデフォルトの profile
とし、Wercker
上で使用する profile
を、WERCKER
としました。
<profiles> <profile> <id>Local</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <jdbc.url>jdbc:postgresql://localhost:5432/databaseName</jdbc.url> <jdbc.username>databaseName</jdbc.username> <jdbc.password>xxxxxxxxxxxx</jdbc.password> <jdbc.driver>org.postgresql.Driver</jdbc.driver> <mongoDb.host>localhost</mongoDb.host> <mongoDb.port>27017</mongoDb.port> <mongoDb.databaseName>mongoDatabaseName</mongoDb.databaseName> <jpa.ddl-generation>none</jpa.ddl-generation> </properties> </profile> <profile> <id>WERCKER</id> <activation> <activeByDefault>false</activeByDefault> </activation> <properties> <jdbc.url>jdbc:postgresql://${env.POSTGRES_PORT_5432_TCP_ADDR}:${env.POSTGRES_PORT_5432_TCP_PORT}/${env.POSTGRES_ENV_POSTGRES_USER}</jdbc.url> <jdbc.username>${env.POSTGRES_ENV_POSTGRES_USER}</jdbc.username> <jdbc.password>${env.POSTGRES_ENV_POSTGRES_PASSWORD}</jdbc.password> <jdbc.driver>org.postgresql.Driver</jdbc.driver> <mongoDb.host>${env.MONGO_PORT_27017_TCP_ADDR}</mongoDb.host> <mongoDb.port>${env.MONGO_PORT_27017_TCP_PORT}</mongoDb.port> <mongoDb.databaseName>mongoDatabaseName</mongoDb.databaseName> <jpa.ddl-generation>drop-and-create-tables</jpa.ddl-generation> </properties> </profile> </profiles>
mongoDb.properties
pom.xml
のprofile
で指定した 変数を 埋め込むため、
MongoDB
の接続情報を プロパティファイル化しました。
host=${mongoDb.host} port=${mongoDb.port} databaseName=${mongoDb.databaseName}
MongoDatabaseProvider.java
MongoDatabase
のProvider
クラスとして、 以下作成しました。
プロパティファイルから、接続情報を 取得するようにします。
package xyz.monotalk.xxx; import com.google.inject.Provider; import com.mongodb.MongoClient; import com.mongodb.client.MongoDatabase; import java.util.Locale; import java.util.ResourceBundle; /** * MongoDatabaseProvider * * @author Kem */ public class MongoDatabaseProvider implements Provider<MongoDatabase> { @Override public MongoDatabase get() { // New MongoClient ResourceBundle rb = ResourceBundle.getBundle("mongoDb", Locale.JAPAN); String host = rb.getString("host"); int port = Integer.valueOf(rb.getString("port")); MongoClient client = new MongoClient(host, port); // New Database String databaseName = rb.getString("databaseName"); MongoDatabase mongoDatabase = client.getDatabase(databaseName); return mongoDatabase; } }
persistence.xml
同様に、接続情報を 変数化しました。
eclipselink.ddl-generation
で初回接続時に Table
を作成するかを 指定しています。
Wercker
上にはTable
が存在しないため、 drop-and-create-tables
でTable
を作成し、
ローカル環境では、Table
は既に 存在し、 データが 削除されると 不都合が あるため、 none
を指定しています。
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd"> <persistence-unit name="Local" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <class>xyz.monotalk.xxx....</class> <properties> <!-- JDBC configuration --> <property name="javax.persistence.jdbc.url" value="${jdbc.url}"/> <property name="javax.persistence.jdbc.user" value="${jdbc.username}"/> <property name="javax.persistence.jdbc.driver" value="${jdbc.driver}"/> <property name="javax.persistence.jdbc.password" value="${jdbc.password}"/> <!-- Logging FOR DEVELOPMENT--> <property name="eclipselink.logging.level.sql" value="FINE"/> <property name="eclipselink.logging.parameters" value="true"/> <!-- DDL generation --> <property name="eclipselink.ddl-generation" value="${jpa.ddl-generation}"/> </properties> </persistence-unit> </persistence>
wercker.yml
の 修正
上記pom.xml
に、profile
LOCAL
と、WERCKER
を
wercker.yml
を
wercker.yml
box: jamesdbloom/docker-java8-maven
は、java8
環境下でmaven
のbox
です。
ポータビリティはgradle
のjava
が
$PSQL_USER
、$PSQL_PASSWORD
はBitBucket
に
Wercker
の
mvn -P WERCKER test
で、test
フェーズまで
何故test
までかとverify
フェーズにはinfer
が
インストールが
# docker box definition box: jamesdbloom/docker-java8-maven services: - id: mongo - id: postgres env: POSTGRES_USER: $PSQL_USER POSTGRES_PASSWORD: $PSQL_PASSWORD # This is the build pipeline. Pipelines are the core of wercker # Read more about pipelines on our dev center # http://devcenter.wercker.com/docs/pipelines/index.html build: # Steps make up the actions in your pipeline # Read more about steps on our dev center: # http://devcenter.wercker.com/docs/steps/index.html steps: - script: name: build code: | mvn -P WERCKER test
設定画面から DB、 ユーザー、 パスワードを 追加
Wercker
の$PSQL_USER
、$PSQL_PASSWORD
を
設定画面
wercker にログインし、 対象リポジトリの settings
に移動して、 Environment variables
をクリックします。 環境変数追加
$PSQL_USER
、$PSQL_PASSWORD
を追加します。 ( $
は削除)
protectedを設定して おくと、 設定した 値は 画面上非表示と なります。
設定は
これで、Wercker
上でJunit
テストケースが
以上です。
コメント