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文件中(因此bash
在sh
兼容模式下运行它).
更好的是,我们可以在它的顶部运行单元测试,xml输出可以通过竹子的JUnit进行解析:
pip install unittest-xml-reporting
python manage.py test --noinput --testrunner="xmlrunner.extra.djangotestrunner.XMLTestRunner"
Run Code Online (Sandbox Code Playgroud)
事实证明这是可能的.有两个主要的集成任务:测试运行结果和代码覆盖结果.我假设普通的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
.
覆盖配置以其他方式完成.
clover.xml
到四叶草XML位置此时,在下一个版本中,您将看到总覆盖率和两个图表:覆盖率历史记录和代码行历史记录.使用coverage工具生成交互式HTML也很不错,因此您可以深入查看某些代码行.
上面的设置(至少在Bamboo 5.7中)已在Artifact作业的选项卡中创建了Clover Report(System).打开它并设置为位置字段,然后设置为复制模式.Bamboo现在将收集HTML报告.您可以在计划的Clover选项卡中看到它.htmlcov
*.*
归档时间: |
|
查看次数: |
15812 次 |
最近记录: |