Jenkins Kubernetes プラグイン

Jenkins Kubernetes プラグインを使用すると、データベースコンテナ用に containerTemplate() を追加できます。

containerTemplate

以下のように postgres用の containerTemplate エントリを追加します。

containerTemplate(args: '-p 6432', name: 'postgres12', image: 'postgres:12',
  envVars: [containerEnvVar(key: 'POSTGRES_PASSWORD', value: 'admin')]
)

これにより、ポート 6432 で実行され、postgres ユーザーのパスワードが admin に設定された postgres コンテナが pod に追加されます。この postgres インスタンスは localhost:6432 で利用できるようになります。

pg_isready

pg_isready を使用するコードブロックを追加して、テストをビルドして実行する前に postgres が準備されるのを待機します。

container('postgres12') {
  print "wait for postgres ready"
  sh('pg_isready -t 60 -h localhost -p 6432')
  print "postgres ready now, continue"
}

ebean-test が開始すると、postgres:admin のユーザー名とパスワードを使用して JDBC 接続を行い、必要に応じてデータベース、ロール、および拡張機能を作成します。

ログ

テストが実際に実行される前のログで、ebean-test が jdbc:postgresql://:6432 に接続し、SQL を実行してテストを実行するために必要なデータベース、ロール、および拡張を作成します。

INFO  ?. io.ebean.EbeanVersion - ebean version: 13.25.0
INFO  ?. io.ebean.config.properties.LoadContext - loaded properties from [application.properties, application-test.yaml]
INFO  ?. io.ebean.test.config.platform.Config - Using jdbc settings - username:my_app url:jdbc:postgresql://:6432/my_app driver:org.postgresql.Driver
TRACE ?. io.ebean.docker.commands.Commands - sqlRun: select 1 from pg_database where datname = 'my_app'
TRACE ?. io.ebean.docker.commands.Commands - sqlRun: select rolname from pg_roles where rolname = 'my_app'
DEBUG ?. io.ebean.docker.commands.Commands - sqlRun: create role my_app password 'test' login createrole
DEBUG ?. io.ebean.docker.commands.Commands - sqlRun: create database my_app with owner my_app
DEBUG ?. io.ebean.docker.commands.Commands - sqlRun: create extension if not exists hstore
DEBUG ?. io.ebean.docker.commands.Commands - sqlRun: create extension if not exists pgcrypto
DEBUG ?. io.ebean.docker.commands.Commands - Container ut_postgres ready with port 6432