2019/02/15

 TravisCIでdocker-composeを起動して、テストしたい


  1. TravisCIでdocker-composeを起動したい
  2. dbのmigration
  3. まとめ
  4. DBへのアクセステスト
  5. すべてのソース
  6. 参考文献

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)

すべてのソース

参考文献

  Python3 CI docker-compose TravisCI docker