概要
下記を実現する方法についてまとめます。
- flywayでDDLの構成管理
- SchemaSpyで最新のデータベースメタ情報を可視化
- CircleCIで一連の作業の自動化
最終的な流れ
- DDLの変更をGitHubにプルリクエスト
- masterにマージ
- CircleCIが起動
- flywayが最新のDDLをDBに当てる
- 今回はCircleCIのローカルDB
- SchemaSpyが最新のDB定義を元にHTMLを生成
- 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_EMAIL
とGITHUB_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/
前述のサンプルプロジェクトはそちらも対応しているので参考にしてみてください。