初めに
CircleCiがV2に移行する前から、2つのデータベース(MySQL)に接続するアプリのテストを実行させていました。
CircleCiが完全にV1を廃止することに伴ってV2に移行した際に設定方法を検討して実現できた方法を記載します。
構成
このような構成のアプリを想定しています。
DBサーバーのインスタンスは1つです。
設定方法
.circleci/config.yml
version: 2
jobs:
build:
docker:
- image: circleci/openjdk:8-jdk
- image: circleci/mysql:5.7
environment:
MYSQL_DATABASE: database1, database2 # ココがポイント!
MYSQL_HOST: 127.0.0.1
MYSQL_ROOT_PASSWORD: 'foo'
MYSQL_ROOT_HOST: '%'
command: [--character-set-server=utf8, --collation-server=utf8_general_ci]
working_directory: ~/repo
environment:
JVM_OPTS: -Xmx3200m
TERM: dumb
TZ: '/usr/share/zoneinfo/Asia/Tokyo'
steps:
- checkout
- run:
name: Wait for db
command: dockerize -wait tcp://localhost:3306 -timeout 1m
- restore_cache:
keys:
- v1-dependencies-{{ checksum "build.gradle" }}
- v1-dependencies-
- run: gradle dependencies
- save_cache:
paths:
- ~/.gradle
key: v1-dependencies-{{ checksum "build.gradle" }}
- run:
name: Running tests
command: gradle test -PexcludeThroughTest=true --info
- store_artifacts:
path: ./build/reports
destination: reports
- store_test_results:
path: ./build/test-results
ポイント
ポイントは環境変数のMYSQL_DATABASEに設定する値です。
カンマ区切りでデータベース名を指定することで、起動時にその名前のデータベースを作成してくれるようになります。
最後に
インターネットで探しても複雑な方法ばかり見つかりますが、この方法が一番シンプルに実現できるのではないでしょうか。
残念ながらこの方法に行き着いたソースがわからなくなってしまったのですが、参考にしていただければ幸いです!