CircleCI上でMySQLとPostgreSQLを扱ったtestを行う
先日Gunosy.go#12でLTしたkyokomi/gomaですが、 CircleCI上でDBを利用してgo generateとtestの実行を行っています。
たぶん公式ドキュメント見ればわかると思いますが、 サクッとやりたい人向けにCircleCI上でMySQLとPostgreSQLを利用する方法をご紹介しようかと思います。
CircleCIでCREATE DATABASE等のsqlを実行
この辺みたら大体わかると思いますが、普通にsqlファイルをmysqlとpsqlコマンドで実行してます。
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.yaml
のdatabase:
に以下を追加します。
# 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
フェーズの後になりますので、database
のpost
もしくは、test
フェーズでDBを使ったtest等を実行しましょう。
kyokomi/gomaの実行時のログですがこんな感じになります。
おわり
CircleCI困ったらsshして入れるので色々試せるのが便利ですね。(どっかでもいいましたが)
※go generateして生成したファイルもgo testしてるのがポイント。