Django
で開発しているシステムを GitHub
で管理してるんですが、自動テストするために「 CircleCI
」とサービス連携させてみました。
CircleCI
の基本的な利用方法としては「 circle.yml
」という設定ファイルにビルド・テストに関する設定を記述して、その設定に基づいてビルドが実行されるというものになります。
circle.yml
という設定ファイルが存在していない場合は、 CircleCI
側が自動でプロジェクトをビルドしてくれるのですが、自分の Django
のシステムでは、デフォルトのビルドだと失敗してしまいます・・・。
設定ファイルに何書けば良いかもあまり情報がなかったので、 Django
での circle.yml
の設定例をまとめておきます。
とりあえず、環境構築〜テスト実行・カバレッジレポート出力まで実行できるようになると思います。
設定ファイル( circle.yml )記載例
Python のバージョン指定
自分の好きな Python
のバージョンが使用したい場合は、バージョンを指定する必要があります。
machine:
python:
version: 3.5.2
タイムゾーン設定
タイムゾーンも設定必要ならば指定します。
machine:
timezone: Asia/Tokyo
っていうか、日本語環境ならほぼ必須の設定じゃないかと・・・。
データベース設定
CircleCI
ではデフォルトで MySQL
と PostgreSQL
が利用できるので、 Django
のシステム側で指定したデータベースをそのまま使えます。
データベース設定の流れとしては、「設定ファイルを上書き・差し替え」→「マイグレーションファイル作成」→「マイグレーション実行」→「差し替えファイルを元に戻す」という流れになります。
database:
override:
# 設定ファイルを上書き
- mv row/settings.ci.py row/settings.py
# urls.py差し替え
- mv sample/urls.py sample/urls.py.org
- mv sample/urls.ci.py sample/urls.py
# マイグレーションファイル作成
- python ./manage.py makemigrations accounts
# マイグレーションファイルをDBへ反映する
- python ./manage.py migrate
# 差し替えていたurls.pyを元に戻す
- mv sample/urls.py.org sample/urls.py
ここで大事なのは、
# 設定ファイルを上書き
- mv sample/settings.ci.py sample/settings.py
と、
# urls.py差し替え
- mv sample/urls.py sample/urls.py.org
- mv sample/urls.ci.py sample/urls.py
(省略)
# 差し替えていたurls.pyを元に戻す
- mv sample/urls.py.org sample/urls.py
の部分です。
CircleCI
ではデータベースへ接続する際のユーザ名とデータベース名が決まっているので、開発に利用しているデータベースの接続情報だと接続できないので、 CircleCI
用の設定ファイルを作成しておいて、設定ファイルの差し替えを行います。これで CircleCI
用の設定ファイルが読み込まれます。
あと、 urls.py
もファイルの差し替えを行なっています。 manage.py
の makemigrations
コマンド実行時になぜか urls.py
のファイルを読み込んで、 forms.py
のファイルまで参照してモデルが利用されているところで「テーブルが存在しません」っていうエラーが出ちゃうので、対処療法的に差し替えてます。
makemigrations
する前なんだから、テーブルが存在しないのは当たり前のような気がするんですけどね・・・。
テスト設定
Django
のテストコード実行に Coverage.py
を利用しているので、テスト設定を上書きします。
test:
override:
- coverage run --source=accounts manage.py test accounts
- coverage html
post:
- mv cover $CIRCLE_ARTIFACTS
テストを実行してカバレッジを HTML
で出力しています。
- mv cover $CIRCLE_ARTIFACTS
カバレッジレポートを格納しているディレクトリを $CIRCLE_ARTIFACTS
という CircleCI
の環境変数のパスに移動させることでビルド画面からもカバレッジレポートが参照できるようになります。
設定ファイル( circle.yml )
設定ファイルの全体像載せておきます。コピペで使い回しできると思います。
machine:
python:
version: 3.5.2
timezone: Asia/Tokyo
database:
override:
# 設定ファイルを上書き
- mv sample/settings.ci.py sample/settings.py
# urls.py差し替え
- mv sample/urls.py sample/urls.py.org
- mv sample/urls.ci.py sample/urls.py
# マイグレーションファイル作成
- python ./manage.py makemigrations accounts
# マイグレーションファイルをDBへ反映する
- python ./manage.py migrate
# 差し替えていたurls.pyを元に戻す
- mv sample/urls.py.org sample/urls.py
test:
override:
- coverage run --source=accounts manage.py test accounts
- coverage html
post:
- mv cover $CIRCLE_ARTIFACTS
最後に
これで、 Django
で CircleCI
が使えるようになりました。ただ、これは最低限の設定なので、カスタマイズすることでいろいろできるようになると思います。
もっと詳しい情報が必要であればこちらが参考になると思います。
CircleCI
を有効活用することでテスト〜デプロイまでを自動化していきたいですね。
コメント