2019/02/15
TravisCIでdocker-composeを起動して、テストしたい
TravisCIでdocker-composeを起動したい
CIテスト環境でDBにデータが突っ込まれている状態でテストができると、確実に自動テストできる範囲が広がります。 DBをdockerで起動することで、CI環境でもDBへのアクセステストを行ってみました。
Travisでは以下のようにinstallすることで、docker-composeが使用できるようになるようです。
- sudo rm /usr/local/bin/docker-compose
- curl -L https://github.com/docker/compose/releases/download/1.18.0-rc2/docker-compose-`uname -s`-`uname -m` > docker-compose
- chmod +x docker-compose
- sudo mv docker-compose /usr/local/bin
docker-composeが使えるようになったら、daemonとしてdockerを起動。
- docker-compose up -d
ちなみに、docker-compose.ymlは以下のような感じです。
version: '3.2'
services:
db:
image: mysql:5.7.22
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: passwd
MYSQL_USER: crudapp
MYSQL_PASSWORD: passwd
MYSQL_DATABASE: crudapp
dbのmigration
DBの初期化はalembicでmigrationファイルを作成し、コマンドでDBを構成してupdateします。 CIテストの度に、DBを構成、初期化します。
- alembic upgrade head
まとめ
最終的にできた.travis.ymlは以下のような感じ。
language: python
python:
- "3.7-dev"
branches:
only:
- master
env:
- DOCKER_COMPOSE_VERSION=1.4.2
before_install:
- sudo rm /usr/local/bin/docker-compose
- curl -L https://github.com/docker/compose/releases/download/1.18.0-rc2/docker-compose-`uname -s`-`uname -m` > docker-compose
- chmod +x docker-compose
- sudo mv docker-compose /usr/local/bin
- docker-compose up -d
install:
- pip3 install -r requirements.txt
script:
- alembic upgrade head
- python3 test.py
DBへのアクセステスト
dbにアクセスしてみます。
test.py
# -*- coding: utf-8 -*-
import mysql.connector
if __name__ == '__main__':
print("db connection test")
conn = mysql.connector.connect(
user='crudapp',
password='passwd',
host='localhost',
port='3307',
database='crudapp')
cur = conn.cursor()
print("db connected")
cur.execute('insert into users (name) values ("test")')
cur.execute("select * from users;")
row = cur.fetchone()
# output
print("db: " + str(row))
cur.close
conn.close
print("db test exit")
exit(0)