django-jenkinsを使ってDjangoのプロジェクトをJenkinsでテスト実行する

DjangoのプロジェクトをJenkinsでビルドする場合、django-jenkinsを使うと便利。
PyPIからdjango-jenkinsをインストールできる。

$ pip install django-jenkins

jenkins用のsettingsファイルを用意する

Djangoのプロジェクトにjenkins用のsettingsファイルを追加して使う。

myproject/settings_jenkins.py

設定例。

# coding: utf-8
from myproject.settings import *

INSTALLED_APPS += (
    'django_jenkins',
)
JENKINS_TASKS = (
    'django_jenkins.tasks.django_tests',
)
PROJECT_APPS = (
    'guestbook',
)

この例ではdjangoユニットテストのみを実行、guestbookアプリのみを対象とするようにしている。

manage.py jenkinsコマンド

manage.py jenkinsコマンドでテストを実行できる。
django-jenkinsのmanage.py jenkinsコマンドには以下のような機能がある。

  • テストランナーをdjango-jenkinsのものに切り替えてくれる
  • テスト対象のアプリをsettingsのPROJECT_APPSで設定できる
  • カバレッジの取得やpylint、pep8などを実行するタスクが組み込まれている
  • 実行するタスクをsettingsのJENKINS_TASKSで設定できる

Jenkinsのシェルの設定

Jenkinsのシステム設定でシェル実行ファイルを/bin/bashにしておく。
これをやらないとifやsourceが使えなかった。

Mercurialリポジトリからのビルド設定

先日作成した、guestbookアプリケーションを含むmyprojectにはdjango-jenkinsの設定を入れてあるので、これをビルドしてみる。
tokibito / sample_nullpobug / source / django / myproject — Bitbucket

プロジェクト名 myproject-guestbook
ソースコード管理システム Mercurial
Repository URL https://bitbucket.org/tokibito/sample_nullpobug

とし、ビルドではシェルスクリプトの実行で、以下のように設定。

if [ ! -d venv ]; then
  virtualenv --distribute venv
fi
source venv/bin/activate
cd django/myproject/
pip install -r requirements.txt
python manage.py jenkins --settings=myproject.settings_jenkins

virtualenvはあらかじめ、サーバーにインストールしておく。これでvirtualenvを作成して、ビルドを実行してくれる。
ビルド後の処理では、JUnitテスト結果の集計を以下のように設定した。

テスト結果XML django/myproject/reports/*.xml

これでテスト結果の集計もうまくいった。