CircleCIで2つのMySQLデータベースに接続するアプリのconfig.yml


初めに

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に設定する値です。
カンマ区切りでデータベース名を指定することで、起動時にその名前のデータベースを作成してくれるようになります。

最後に

インターネットで探しても複雑な方法ばかり見つかりますが、この方法が一番シンプルに実現できるのではないでしょうか。
残念ながらこの方法に行き着いたソースがわからなくなってしまったのですが、参考にしていただければ幸いです!