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

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

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

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

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

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


person TM.    schedule 14.09.2009    source источник
comment
Старый вопрос. Но я добавил py.test как исполняемый файл Bamboo и просто использую его для запуска тестов (с указанием вывода junit-xml). Затем нужно запустить анализатор теста JUnit как отдельное задание.   -  person Samuel O'Malley    schedule 16.02.2016
comment
@ SamuelO'Malley, не могли бы вы опубликовать пример того, как вам это удалось?   -  person MikeyE    schedule 12.02.2018
comment
@MikeyE - Я фактически изменил способ работы с тех пор, как был опубликован этот комментарий. Теперь у меня была задача сценария Bamboo, и я имел содержимое как py.test --junit-xml results.xml, а после этого у меня есть if [ $? -ne 0 ]; then echo "Test Failed"; fi, чтобы проглотить код возврата. В противном случае Bamboo не позволит вам поместить в карантин отдельный результат теста и пометит все задание как неудавшееся.   -  person Samuel O'Malley    schedule 13.02.2018


Ответы (4)


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

./manage.py test

как это обычно бывает:

mvn clean install

or:

ant compile

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

person John Paulett    schedule 14.09.2009

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

pip install unittest-xml-reporting
python manage.py test --noinput --testrunner="xmlrunner.extra.djangotestrunner.XMLTestRunner"
person Raffi    schedule 04.09.2014
comment
@Raffi, не могли бы вы подробнее рассказать, почему исходный bin / activate не работает в файловых скриптах? Хорошо использовал его во встроенных скриптах, но хотел бы как можно больше перенести в файловые скрипты, поскольку это упрощает обслуживание (контроль версий и т. Д.). - person Xabs; 13.11.2014
comment
В журнале сборки Bamboo и для встроенных скриптов у меня есть что-то вроде Beginning to execute external process for build 'XXX Django artifactsZZZ #35'\n ... running command line: \n/bin/sh /tmp/SW-DCD-JOB1-35-ScriptBuildTask-9100354988645888838.sh. Встроенный скрипт сбрасывается в .sh файл и выполняется /bin/sh. sh не имеет встроенной команды source (type source возвращает ошибку). Итак, . более совместим с тем, что я хочу здесь - person Raffi; 13.11.2014

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

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

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

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

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

Стандартный де-факто стандартный инструмент покрытия кода Python, охват, создает в некотором роде формат XML Cobertura, но есть преобразователь. Существует подключаемый модуль 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.xml в Расположение XML Clover.

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

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

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

person saaj    schedule 15.09.2016

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

person FierceScarf    schedule 13.07.2015