web-dev-qa-db-ja.com

Atlassian Bamboo with Django&Python-可能ですか?

私の会社では、現在、継続的インテグレーションツールに Atlassian Bamboo を使用しています。現在、すべてのプロジェクトでJavaを使用しているため、うまく機能します。

ただし、新しいアプリケーションの1つにDjango + Pythonを使用することを検討しています。これに、Bambooを使用できるかどうか疑問に思いました。

まず、Bambooを使用したことがあり、構成していなかったため(ビルド用にsvn checkoutディレクトリを変更するなどの単純な変更を除く)、Bambooについての知識は低いと言えます。

明らかに、ビルドを実行するだけではあまり意味がありません(Pythonプロジェクトは実際にはビルドされないため)が、Bambooを使用してテストスイートを実行できるようにしたいと思います)また、bambooを使用して、Javaプロジェクトの場合と同じように、さまざまなテスト環境に最新のコードをデプロイします。

BambooはPythonプロジェクトでこのタイプのものをサポートしていますか?

33
TM.

Bambooは基本的にシェルスクリプトを実行するだけなので、これは簡単に次のようになります。

./manage.py test

通常は次のとおりです。

mvn clean install

または:

ant compile

Djangoテストランナーを従来のJUnitXML出力に出力するためにマッサージする必要があるかもしれません。そうすれば、Bambooは、合格したテストの数に関するきれいなグラフを提供できます。 thisを見てください。 post xmlrunner.pyを使用してPython Hudson を操作する方法について。 NoseXUnitもご覧ください。

26
John Paulett

クリーンな環境でpipとvirtualenvにbootstrapを追加することもできますが、これはすばらしいことです。

wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py --root=${bamboo.build.working.directory}/tmp --ignore-installed
export PATH=${bamboo.build.working.directory}/tmp/usr/local/bin:$PATH
export PYTHONPATH=${bamboo.build.working.directory}/tmp/usr/local/lib/python2.7/dist-packages:$PYTHONPATH
pip install --root=${bamboo.build.working.directory}/tmp --ignore-installed virtualenv
virtualenv virtual_tmp
cd virtual_tmp
. bin/activate
echo Pip is located `which pip`
pip install Django
pip install djangorestframework

警告、インラインスクリプトタスクはshファイルに保存されているため、source bin/activateは機能しません(したがって、bashsh互換モードで実行します)。

編集

さらに良いことに、bambooのJUnitで解析できるxml出力を使用して、その上でユニットテストを実行できます。

pip install unittest-xml-reporting
python manage.py test --noinput --testrunner="xmlrunner.extra.djangotestrunner.XMLTestRunner"
13
Raffi

それは可能であることがわかりました。 2つの主要な統合タスクがあります。テストランナーの結果とコードカバレッジの結果です。通常のPython 3コードベースと標準のunittestテストスイートを想定しています。

テストランナー

Bambooは、テストランナーの結果が JUnit XML形式 になることを期待しています。 Cheese Shopにはそのような出力を生成できる 別のテストランナー がありますが、それを実行するには小さなコードを記述する必要がありますが、これはニースではありません。コードベースをそのまま維持するためのより良い方法は、 pytest の機能を使用することです。

コードカバレッジ

Bambooは、AtlassianCloverのXML形式のみをサポートします。ここで重要なのは、Atlassian Cloverプラグインを有効にする必要がないことです(そして、そのライセンスにはいくらかの費用がかかります)。竹はそれ自体で動作します。

Pythonのデファクトスタンダードコードカバレッジツールである coverage は、Cobertura XML形式をいくらか生成しますが、 converter があります。カバレッジツールと統合するための pytestプラグイン があります。

解決

これが Tox 環境で、pytestを使用して両方のBamboo統合を機能させました。

[tox]
envlist   = py34
skipsdist = True

[testenv]
setenv     = LANG=C.UTF-8
basepython = python3.4
deps       = -r{toxinidir}/requirements.txt

[testenv:bamboo]
commands = 
  py.test --junitxml=results.xml \
    --cov=project_name --cov-config=tox.ini --cov-report=xml \
    --cov-report=html project_name/test
    coverage2clover -i coverage.xml -o clover.xml
deps = 
    {[testenv]deps}
    pytest
    pytest-cov
    coverage2clover

# read by pytest
[pytest]
python_files = *.py

# read by coverage
[run]
omit=project_name/test/*,project_name/__main__.py

Pytestとpytest-covはどちらも、コマンドラインでサポートされていない構成にtox.iniを使用することに注意してください。これにより、リポジトリのルートに余分な混乱が生じるのを防ぐことができます。 pytestはtox.iniを自動的に読み取ろうとします。 pytest-covは .coveragerc にバイパスしますが、これもINIファイルであるため、tox.iniが適合します。

Bamboo側で、tox -e bambooを実行する スクリプトタスク を追加します。次に、 JUnit解析タスク をジョブに追加します。ダイアログのカスタム結果ディレクトリの指定の下にresults.xmlを入力します。

カバレッジ構成は他の方法で行われます。

  1. ジョブのその他タブを開きます
  2. チェックCloverを使用してこのビルドのコードカバレッジを収集します
  3. 選択Cloverはすでにこのビルドに統合されており、clover.xmlファイルが生成されます
  4. clover.xmlClover XML Locationに入力します

enter image description here

次のビルドのこの時点で、合計カバレッジと2つのグラフが表示されます:カバレッジ履歴コード履歴の行。また、カバレッジツールでインタラクティブなHTMLを作成できるので、特定のコード行にドリルダウンできます。

上記の設定(少なくともBamboo 5.7では)により、アーティファクトジョブのタブにクローバーレポート(システム)が作成されました。それを開き、htmlcovLocationフィールドに設定し、*.*Copy patternに設定します。 BambooはHTMLレポートを収集します。プランのクローバータブで確認できます。

8
saaj

Pytestを使用する場合は、単にpy.test --junitxml=/path/to/results/xml/file.xmlを使用できます。

0
user3277225