37

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

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

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

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

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

4

4 に答える 4

27

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

./manage.py test

通常は次のとおりです。

mvn clean install

また:

ant compile

Djangoテストランナーの出力を従来のJUnitXML出力にマッサージする必要がある場合があります。これにより、Bambooは、合格したテストの数に関するきれいなグラフを提供できます。xmlrunner.pyを使用してPythonをHudsonで動作させる方法については、この投稿を参照してください。NoseXUnitもご覧ください

于 2009-09-14T04:51:13.430 に答える
16

クリーンな環境でpipとvirtualenvのブートストラップを非常に簡単に追加することもできます。これはすばらしいことです。

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

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

編集

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

pip install unittest-xml-reporting
python manage.py test --noinput --testrunner="xmlrunner.extra.djangotestrunner.XMLTestRunner"
于 2014-09-04T13:49:23.307 に答える
9

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

テストランナー

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

コードカバレッジ

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

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

解決

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

[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. [クローバーを使用してこのビルドのコードカバレッジを収集する]をオンにします
  3. Select Cloverはすでにこのビルドに統合されており、clover.xmlファイルが作成されます
  4. CloverXMLの場所clover.xmlに入力します

ここに画像の説明を入力してください

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

上記の設定(少なくともBamboo 5.7では)により、アーティファクトジョブのタブにクローバーレポート(システム)が作成されました。それを開いて[場所]フィールドに設定し、[パターンをコピー]に設定します。BambooはHTMLレポートを収集します。あなたはあなたの計画のクローバータブでそれを見ることができます。htmlcov*.*

于 2016-09-15T10:54:43.940 に答える
0

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

于 2015-07-13T21:31:24.307 に答える