使用Django和Python的Atlassian Bamboo - 可能吗?

TM.*_*TM. 33 python deployment django continuous-integration bamboo

在我的公司,我们目前使用Atlassian Bamboo作为我们的持续集成工具.我们目前在所有项目中都使用Java,因此效果很好.

但是,我们正在考虑将Django + Python用于我们的一个新应用程序.我想知道是否可以使用Bamboo.

首先,让我说我对Bamboo的熟悉程度很低,因为我只使用它,没有配置它(除了简单的更改,比如更改构建的svn checkout目录).

显然,运行构建没有太多意义(因为Python项目没有真正构建),但我希望能够使用Bamboo来运行测试套件,以及使用bamboo来部署我们对各种测试环境的最新代码与我们对Java项目的处理方式相同.

Bamboo是否通过Python项目支持此类事物?

Joh*_*ett 26

Bamboo本质上只运行一个shell脚本,所以这很容易:

./manage.py test
Run Code Online (Sandbox Code Playgroud)

通常是:

mvn clean install
Run Code Online (Sandbox Code Playgroud)

要么:

ant compile
Run Code Online (Sandbox Code Playgroud)

你可能需要按摩到Django测试运行器的输出到传统的JUnit XML输出,这样Bamboo就可以为你提供关于传递了多少测试的漂亮图表.看看这篇关于使用xmlrunner.py让Python与Hudson一起工作的帖子.还可以看看NoseXUnit.


Raf*_*ffi 13

你甚至可以很容易地在一个干净的环境中为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
Run Code Online (Sandbox Code Playgroud)

警告,source bin/activate不起作用,因为内联脚本任务存储在sh文件中(因此bashsh兼容模式下运行它).

编辑

更好的是,我们可以在它的顶部运行单元测试,xml输出可以通过竹子的JUnit进行解析:

pip install unittest-xml-reporting
python manage.py test --noinput --testrunner="xmlrunner.extra.djangotestrunner.XMLTestRunner"
Run Code Online (Sandbox Code Playgroud)


saa*_*aaj 9

事实证明这是可能的.有两个主要的集成任务:测试运行结果和代码覆盖结果.我假设普通的Python 3代码库和标准unittest测试套件.

试验跑步者

Bamboo期望测试运行器以JUnit XML格式生成结果.在Cheese Shop上有单独的测试运行器能够产生这样的输出,但它需要你编写一些代码来运行它,这是不好的.保持代码库完整的更好方法是使用pytest的功能.

代码覆盖率

Bamboo仅支持Atlassian Clover的XML格式.这里重要的一点是,您不需要启用Atlassian Clover插件(并且需要花费一些钱才能获得许可).竹子独自工作.

Python事实上的标准代码覆盖工具,覆盖范围,产生一些Cobertura XML格式,但有一个转换器.有一个pytest插件可以与coverage工具集成.

这是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
Run Code Online (Sandbox Code Playgroud)

请注意,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位置

在此输入图像描述

此时,在下一个版本中,您将看到总覆盖率和两个图表:覆盖率历史记录代码行历史记录.使用coverage工具生成交互式HTML也很不错,因此您可以深入查看某些代码行.

上面的设置(至少在Bamboo 5.7中)已在Artifact作业的选项卡中创建了Clover Report(System).打开它并设置为位置字段,然后设置为复制模式.Bamboo现在将收集HTML报告.您可以在计划的Clover选项卡中看到它.htmlcov*.*