Атлассический бамбук с Django & Python - возможно? - PullRequest
33 голосов
/ 14 сентября 2009

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

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

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

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

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

Ответы [ 4 ]

26 голосов
/ 14 сентября 2009

Bamboo, по сути, просто запускает скрипт оболочки, так что это может быть так же просто:

./manage.py test

как обычно:

mvn clean install

или

ant compile

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

13 голосов
/ 04 сентября 2014

Вы можете даже легко добавить загрузчик для 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).

Редактировать

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

pip install unittest-xml-reporting
python manage.py test --noinput --testrunner="xmlrunner.extra.djangotestrunner.XMLTestRunner"
8 голосов
/ 15 сентября 2016

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

Тестовый бегун

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

Код покрытия

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

Стандартный инструмент покрытия кода Python де-факто, охват , производит несколько Формат 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 подходит.

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

Настройка покрытия производится другим способом.

  1. Открыть Разное Вкладка вашей работы
  2. Проверка Использование Clover для сбора покрытия кода для этой сборки
  3. Выберите Clover уже интегрирован в эту сборку, и будет создан файл clover.xml
  4. Введите clover.xml в Clover XML Location

enter image description here

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

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

0 голосов
/ 14 июля 2015

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

...