37 votes

Atlassian Bamboo avec Django et Python - Possible ?

Dans mon entreprise, nous utilisons actuellement Atlassian Bamboo pour notre outil d'intégration continue. Nous utilisons actuellement Java pour tous nos projets, donc cela fonctionne très bien.

Cependant, nous envisageons d'utiliser un Django + Python pour l'une de nos nouvelles applications. Je me demandais s'il était possible d'utiliser Bamboo pour cela.

Tout d'abord, permettez-moi de dire que j'ai un faible niveau de familiarité avec Bamboo, car je l'ai seulement utilisé, sans le configurer (en dehors de changements simples comme la modification du répertoire de vérification svn pour une construction).

Il est évident qu'il n'y a pas beaucoup d'intérêt à simplement lancer un build (puisque les projets Python ne se construisent pas vraiment), mais j'aimerais pouvoir utiliser Bamboo pour lancer la suite de tests, ainsi que pour déployer le dernier code dans nos différents environnements de test, comme nous le faisons avec nos projets Java.

Est-ce que Bamboo supporte ce genre de chose avec un projet Python ?

27voto

John Paulett Points 9021

Bamboo ne fait essentiellement qu'exécuter un shell script, donc cela pourrait tout aussi bien être :

./manage.py test

comme c'est généralement le cas :

mvn clean install

ou :

ant compile

Il se peut que vous deviez transformer la sortie du programme d'exécution des tests de Django en sortie XML JUnit traditionnelle, afin que Bamboo puisse vous fournir de jolis graphiques sur le nombre de tests réussis. Regardez ce poste à propos de l'utilisation de xmlrunner.py pour faire fonctionner Python avec Hudson . Jetez également un coup d'œil à NoseXUnit .

16voto

Raffi Points 697

Vous pouvez même ajouter un bootstrap pour pip et virtualenv sur un environnement propre assez facilement, ce qui est cool :

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

Attention, source bin/activate ne fonctionne pas car les tâches script en ligne sont stockées dans un fichier sh (donc bash l'exécuter dans sh mode de compatibilité).

Modifier

Mieux encore, nous pouvons exécuter des tests unitaires par-dessus, avec des sorties xml qui peuvent être analysées par le JUnit de bambou :

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

9voto

saaj Points 412

Il s'avère que c'est possible. Il y a deux tâches d'intégration majeures : les résultats du test runner et les résultats de la couverture du code. Je suppose que la base de code Python 3 est normale et que le code standard unittest suite de tests.

Test runner

Bamboo s'attend à ce que les résultats de l'exécution des tests soient Format XML de JUnit . Il y a piste d'essai séparée sur le Cheese Shop capable de produire une telle sortie, mais il vous faudrait écrire un peu de code pour l'exécuter, ce qui n'est pas agréable. Un meilleur moyen de garder la base de code intacte est d'utiliser pytest Les caractéristiques de l'entreprise.

Couverture du code

Bamboo ne supporte que le format XML de Atlassian Clover. Il est important de noter que vous n'avez pas besoin d'activer le plugin Atlassian Clover (et d'obtenir une licence pour celui-ci, ce qui coûte quelques dollars). Bamboo fonctionne de manière autonome.

Outil de couverture de code standard de facto pour Python, couverture produit quelque peu format XML Cobertura, mais il y a une convertisseur . Il y a un plugin pytest pour l'intégration avec l'outil de couverture.

Solution

Voici le Tox où j'ai utilisé pytest pour faire fonctionner les deux intégrations de 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

Notez que pytest et pytest-cov utilisent tous deux tox.ini pour la configuration qui n'est pas prise en charge par la ligne de commande. Cela vous évite une fois de plus d'avoir un encombrement supplémentaire dans la racine de votre dépôt. pytest tente de lire tox.ini automatiquement. pytest-cov contourne à .coveragerc mais parce que c'est aussi un fichier INI, tox.ini correspond.

Du côté du bambou, ajoutez un script tâche qui fonctionne tox -e bamboo . Puis ajoutez Tâche d'analyse JUnit à l'emploi. Dans son dialogue, sous Spécifier des répertoires de résultats personnalisés mettre results.xml .

La configuration de la couverture se fait d'une autre manière.

  1. Ouvrir Divers onglet de votre emploi
  2. Vérifiez Utiliser Clover pour collecter la couverture de code pour cette construction.
  3. Sélectionnez Clover est déjà intégré dans cette version et un fichier clover.xml sera produit.
  4. Type clover.xml en Emplacement de Clover XML

enter image description here

À ce stade, dans votre prochaine construction, vous verrez la couverture totale et deux graphiques : Historique de la couverture y Historique des lignes de code . Il est également agréable de disposer d'un HTML interactif produit par l'outil de couverture, de sorte que vous puissiez accéder à certaines lignes de code.

Les réglages effectués ci-dessus (du moins dans Bamboo 5.7) ont créé Rapport Clover (système) en Artefact l'onglet du travail. Ouvrez-le et définissez htmlcov a Localisation et *.* a Copier le modèle . Bamboo va maintenant collecter les rapports HTML. Vous pouvez les voir à Trèfle de votre plan.

0voto

FierceScarf Points 451

Si vous utilisez pytest, vous pouvez simplement utiliser py.test --junitxml=/path/to/results/xml/file.xml

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X