きょこみのーと

技術に関係ないほうのブログ

CircleCI上でMySQLとPostgreSQLを扱ったtestを行う

先日Gunosy.go#12でLTしたkyokomi/gomaですが、 CircleCI上でDBを利用してgo generateとtestの実行を行っています。

github.com

たぶん公式ドキュメント見ればわかると思いますが、 サクッとやりたい人向けにCircleCI上でMySQLPostgreSQLを利用する方法をご紹介しようかと思います。

CircleCIでCREATE DATABASE等のsqlを実行

この辺みたら大体わかると思いますが、普通にsqlファイルをmysqlpsqlコマンドで実行してます。

https://github.com/kyokomi/goma/blob/master/circle.yml#L7

  • $HOME/$CIRCLE_PROJECT_REPONAMEは、CircleCIでgit checkoutされるリポジトリのPATH
  • 今回は例として、sample_dbという名前のDatabaseを作成する
  • data.sqlには、CREATE TABLE文やINSERT文が入っているイメージ

MySQL

/* ddl/mysql/setup.sql */

CREATE DATABASE sample_db;

circle.yamldatabase:に以下を追加します。

# circle.yaml

database:
  post:
    - mysql -u root < $HOME/$CIRCLE_PROJECT_REPONAME/ddl/mysql/setup.sql
    - mysql sample_db -u root < $HOME/$CIRCLE_PROJECT_REPONAME/ddl/mysql/data.sql

PostgreSQL

念のためSUPERUSERとLOGINのROLEを設定してますが不要かもです。

/* ddl/postgres/setup.sql */

CREATE DATABASE sample_db;
CREATE ROLE postgres SUPERUSER;
ALTER ROLE postgres WITH LOGIN;

mysqlと書き方が違うので注意。

# circle.yaml

database:
  post:
    - psql -U postgres -f $HOME/$CIRCLE_PROJECT_REPONAME/ddl/postgres/setup.sql
    - psql -d sample_db -U postgres -f $HOME/$CIRCLE_PROJECT_REPONAME/ddl/postgres/data.sql

CircleCI実行の順番

databaseフェーズは、dependenciesフェーズの後になりますので、databasepostもしくは、testフェーズでDBを使ったtest等を実行しましょう。

kyokomi/gomaの実行時のログですがこんな感じになります。

f:id:kyokomi:20150418193629p:plain

f:id:kyokomi:20150418193636p:plain

おわり

CircleCI困ったらsshして入れるので色々試せるのが便利ですね。(どっかでもいいましたが)

※go generateして生成したファイルもgo testしてるのがポイント。