Maven
CircleCI
Flyway
SchemaSpy

flyway + SchemaSpy + CircleCI でDDLの構成管理と可視化

More than 1 year has passed since last update.

概要

下記を実現する方法についてまとめます。

  • flywayでDDLの構成管理
  • SchemaSpyで最新のデータベースメタ情報を可視化
  • CircleCIで一連の作業の自動化

最終的な流れ

  1. DDLの変更をGitHubにプルリクエスト
  2. masterにマージ
  3. CircleCIが起動
  4. flywayが最新のDDLをDBに当てる
    • 今回はCircleCIのローカルDB
  5. SchemaSpyが最新のDB定義を元にHTMLを生成
  6. GitHubに成果物をpush

サンプルプロジェクト

https://github.com/su-kun1899/schemaspy-plugin-sample
https://su-kun1899.github.io/schemaspy-plugin-sample/

手順

Mavenプロジェクトの作成

Mavenプロジェクトを作成し、pom.xmlを下記のように定義します。
flywayのmavenプラグインと、schemaspyのmavenプラグインを設定しています。

※schemaspyプラグインは現在mysqlしか対応していません

<project>
...
    <build>
    ...
        <plugins>
        ...
            <plugin>
                <groupId>red.sukun1899</groupId>
                <artifactId>schemaspy-maven-plugin</artifactId>
                <version>1.1.0</version>
                <configuration>
                    <databaseType>${database.type}</databaseType>
                    <host>${database.host}</host>
                    <user>${database.user}</user>
                    <dbName>${database.dbName}</dbName>
                    <outputDirectory>docs</outputDirectory>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.flywaydb</groupId>
                <artifactId>flyway-maven-plugin</artifactId>
                <version>4.0.3</version>
                <configuration>
                    <url>jdbc:${database.type}://${database.host}:3306/${database.dbName}</url>
                    <user>${database.user}</user>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.6</version>
                    </dependency>
                </dependencies>
            </plugin>
        ...
        </plugins>
    ...
    </build>
...
</project>

DDLの配置

src/main/resources/db/migration/配下に、flywayのルールに則ってSQL(DDL)を配置します。

例えばV1_0_0__initial.sqlといった具合です。

GiHubの新規リポジトリへpush

GitHubの新規リポジトリを作成し、作成したプロジェクトをpushします。

GitHubリポジトリとCircleCIの連携

下記を参考に、連携させます。
http://qiita.com/kooohei/items/4806fdb6b92982e47f81

CircleCIの設定

下記のURLから、対象のリポジトリを選択します。
https://circleci.com/add-projects

[project settings]→[Environment Variables]から、GITHUB_USER_EMAILGITHUB_USER_NAMEを環境変数として設定します。

[project settings]→[SSH Permissions]にGitHub用のSSH Keyを登録します。
hostnameはgithub.comです。
※CircleCI用のKeyを新たに作成し、GitHubに公開鍵を登録しておくことを推奨

circle.ymlの作成

CircleCI用の設定ファイルを作成し、pushします。

下記の流れになっています。

  • databaseを作成
  • flywayプラグインの実行
  • schemaspyプラグインの実行
  • 生成したHtmlをGitHubにpush
machine:
  java:
    version: oraclejdk8
general:
   artifacts:
     - "docs"
database:
  post:
    - mysql -u root --execute "create database if not exists sample character set utf8"
dependencies:
  override:
    - mvn dependency:resolve
test:
  pre:
    - mvn flyway:info
  override:
    - mvn flyway:migrate
  post:
    - mvn flyway:info
deployment:
  deploy:
    branch: master
    commands:
      - mvn schemaspy:schemaspy
      - git config --global user.email ${GITHUB_USER_EMAIL}
      - git config --global user.name ${GITHUB_USER_NAME}
      - git add -A
      - git commit ./docs/* -m "Update schemaSpy html [ci skip]"
      - git push git@github.com:su-kun1899/schemaspy-plugin-sample.git $CIRCLE_BRANCH

GitHub Pagesの設定

下記を設定すると、GitHub Pagesで見られるようになります。
http://qiita.com/tonkotsuboy_com/items/f98667b89228b98bc096

※ただし、GitHub Pagesはprivateリポジトリであってもpublicになってしまうので注意

CircleCIはartifactというストレージ機能があるので、そちらを利用すると、参照可能です。
https://circleci.com/docs/build-artifacts/

前述のサンプルプロジェクトはそちらも対応しているので参考にしてみてください。

参考