Подтвердить что ты не робот

Atlassian Bamboo с Django & Python - возможно?

В моей компании мы в настоящее время используем Atlassian Bamboo для нашего инструмента непрерывной интеграции. В настоящее время мы используем Java для всех наших проектов, поэтому он отлично работает.

Однако мы рассматриваем использование Django + Python для одного из наших новых приложений. Мне было интересно, можно ли использовать Bamboo для этого.

Прежде всего, позвольте мне сказать, что у меня низкий уровень знакомости с Bamboo, поскольку я только когда-либо использовал его, не настроил его (кроме простых изменений, например, изменение каталога svn checkout для сборки).

Очевидно, что нет простого смысла в создании сборки (поскольку проекты Python действительно не строятся), но я бы хотел использовать Bamboo для запуска набора тестов, а также использовать бамбук для развертывания последнего кода в наших различных тестовых средах, как мы это делаем с нашими проектами Java.

Поддерживает ли Bamboo этот тип вещей с помощью проекта Python?

4b9b3361

Ответ 1

Бамбук по существу просто запускает оболочку script, поэтому это может быть так же легко:

./manage.py test

как обычно:

mvn clean install

или

ant compile

Возможно, вам придется массировать вывод тестового бегуна Django на традиционный вывод JUnit XML, чтобы Bamboo мог дать вам довольно графы о том, сколько тестов прошло. Посмотрите этот пост об использовании xmlrunner.py, чтобы заставить Python работать с Hudson. Также посмотрите NoseXUnit.

Ответ 2

Вы даже можете легко добавить загрузочную ленту для 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 не работает, поскольку встроенные задачи script сохраняются в sh файле (поэтому bash запустите его в режиме совместимости sh).

Изменить

Еще лучше, мы можем запускать модульные тесты в верхней части, с выводом xml, который может быть проанализирован JUnit бамбука:

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

Ответ 3

Оказывается, это возможно. Существуют две основные задачи интеграции: результаты тестирования и результаты покрытия кода. Я предполагаю нормальную базу кода Python 3 и стандартный набор тестов unittest.

Тест-драйв

Bamboo ожидает, что результаты тестирования будут JUnit XML format. В Cheese Shop есть отдельный тестовый бегун, но для этого потребуется написать небольшой код для запуска, который это не приятно. Лучшим способом, который сохраняет целостность кода, является использование pytest.

Покрытие кода

Bamboo поддерживает только формат XML Atlassian Clover. Важно отметить, что вам не нужен плагин Atlassian Clover (и лицензия на него, которая стоит несколько долларов). Бамбук работает сам по себе.

Стандартный инструмент покрытия кода Python de facto, coverage, производит несколько Cobertura XML, но есть конвертер. Там плагин 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.

На стороне бамбука добавьте script task, который запускается tox -e bamboo. Затем добавьте JUnit parse task к заданию. В диалоговом окне "Задать настраиваемые каталоги результатов" введите results.xml.

Конфигурация покрытия выполняется другим способом.

  • Откройте вкладку "Разное" вашей работы.
  • Проверить использование клевера для сбора покрытия кода для этой сборки
  • Выбор Clover уже интегрирован в эту сборку, и будет создан файл clover.xml
  • Введите clover.xml в XML-расположение Clover

введите описание изображения здесь

На этом этапе вашей следующей сборки вы увидите общий охват и две диаграммы: история покрытия и строки истории кода. Также приятно иметь интерактивный HTML, созданный с помощью инструмента охвата, поэтому вы можете перейти к определенной строке кода.

Настройки, сделанные выше (по крайней мере, в Bamboo 5.7), создали отчет Clover (System) на вкладке задания Artifact. Откройте его и установите htmlcov в поле "Место" и *.* на "Копировать шаблон". Теперь Bamboo собирает отчеты HTML. Вы можете увидеть его на вкладке "Кловер" вашего плана.

Ответ 4

Если вы используете pytest, вы можете просто использовать py.test --junitxml=/path/to/results/xml/file.xml