Django Logo

[Django]CircleCI の設定ファイル( circle.yml )を作成する

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 ではデフォルトで MySQLPostgreSQL が利用できるので、 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.pymakemigrations コマンド実行時になぜか 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

最後に

これで、 DjangoCircleCI が使えるようになりました。ただ、これは最低限の設定なので、カスタマイズすることでいろいろできるようになると思います。

もっと詳しい情報が必要であればこちらが参考になると思います。

https://circleci.com/docs/"

CircleCIを有効活用することでテスト〜デプロイまでを自動化していきたいですね。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です