JenkinsでtoxとPytestを使ってCI

JenkinsでToxとPytestを使って、テストを実行するまでの設定。

まず、Jenknsがインストールされているサーバに下記をインストールします。

本当は、Virtualenvを使うのが良いのですが、Jenkinsの設定が面倒なので、そのまま入れます。。。。(あんまり良くないよね。。。。。)

  1. Tox.iniを準備

    試験したいプロジェクトにTox.iniファイルを作成します。

    今回は、Python2.7と3.4で、PytestとPEP8確認とカバレッジを実行します。(ちなみに、試験で使うPythonはインストールされてないとダメです。なので、Python2,7と3.4はJenkinsサーバにインストール済みです。)

    プロジェクトのdirectory構成はこんな感じ。

    ├── LICENSE
    ├── application
    │   ├── Calculation.py
    │   ├── __init__.py
    ├── setup.py
    ├── test
    │   ├── test_Calculation.py
    └── tox.ini
    

    ** Tox.ini **

    [tox]
    envlist = py27, py34
    
    [pytest]
    pep8maxlinelength = 120
    
    [testenv:py27]
    basepython = /usr/local/python27/bin/python2.7
    
    [testenv:py34]
    basepython = /usr/local/python34/bin/python3.4
    
    [testenv]
    deps =
      pytest
      pytest-cov
      pytest-pep8
      blinker
      Flask
      itsdangerous
      Jinja2
      MarkupSafe
      raven
      requests
      six
      Werkzeug
    
    commands =
      py.test \
        --pep8 \
        --cov application \
        --cov-report xml \
        --junitxml=junit-{envname}.xml \
        test
    
  2. setup.pyを準備

    Toxにはsetup.pyが必ず必要らしいので、簡易的な物を作成します。

    # -*- coding:utf-8 -*- 
    from distutils.core import setup
    setup(name='application name', 
      version='0.0.1',
      description='application description',
      author='auth user name',
      author_email='email@localhost.localhost', )
    
  3. JenkinsサーバにToxをインストール

    $ sudo pip install tox

    ずらずらと・・・

    $ sudo -u jenkins python -c "import tox; print tox.__version__"

    今回は「1.9.0」がインストールされた様です。

  4. jenkinsに「shiningpanda」「Cobertura Plugin」プラグインをインストール

    ・「shiningpanda」は、JenkinsでPythonを実行するためのプラグインです。

    ・「Cobertura Plugin」はカバレッジ集計用のプラグインです。

    「Jenkinsの管理」→「プラグインマネージャ」→「利用可能」タブに進んで、「ShiningPanda Plugin」「Cobertura Plugin」にチェックを入れてインストールします。

  5. JenkinsにPythonの設定

    今回は、Python2.7とPython3.4を設定します。

    「Jenkinsの管理」→「システムの設定」のなかに「Python」という項目があると思います。

    「Python追加」から必要な分だけPythonの設定を入れて、保存。

    <各項目の設定>    * Name: Jenkinsで識別するための名前(何でもよさそう)  * Home or executable: Pythonの実行パス。「which python」等で確認して設定。

  6. Jobの作成

    「新規ジョブ作成」から「マルチ構成プロジェクトのビルド」を選択して、OK。

    プロジェクト名はお好きな物を。

  7. Jobの設定

    1. で新規にジョブを作成した場合は、設定画面に遷移しているはずなので。(遷移していない人は、プロジェクト名を選択して、「設定」を押してください。)

    設定画面の下の方にある項目を設定してきます。それ以外の項目は、GithubにコミットしたタイミングでJobを走らせたい場合は設定してください(ここでは割愛)。

    次の3カ所を設定して、保存する。

    • マトリックスの設定

      軸の追加」→「Tox」を選択して、「py27」にチェック。「py34」にもチェックしたいが項目がない。。。

      仕方が無いので、「高度な設定」→「py34」と入力。

    • ビルド

    「ビルド手順の追加」→「Tox Bulider」を選択し、「Configuration file」に「tox.ini」(デフォルトだった)になっていることを確認。

    ![](./jenkins5.png)
    
    • ビルド後の処理

    「ビルド後の処理の追加」から次の2つを選択して設定する。

    ①「Cobertura カバレッジ・レポートの集計」

    Cobertura XMLレポート パターン: **/coverage.xml

    ※Pytestのカバレッジレポートは、「coverage.xml」で出力されるので。

    ②「JUnitテスト結果の集計」

    テスト結果XML: **/junit-*.xml

    ※tox.iniで設定したファイル名を指定。

    設定するとこんな感じになる。

  8. あとは「ビルド実行」を押すだけ。

参考

  • http://d.hatena.ne.jp/kuma8/20121124/1353723982
  • http://tox.readthedocs.org/en/latest/example/jenkins.html
  • http://shiningpanda.com/tox-on-jenkins-with-shiningpanda-plugin.html