Makina Blog
Django et Jenkins
Lors des Recontres Django 2011, Nicolas Perriault a présenté les principes de l'intégration continue avec Django, Jenkins, et … django-jenkins !
Lors des Recontres Django 2011, Nicolas Perriault a présenté les principes de l'intégration continue avec Django, Jenkins, et … django-jenkins !
Pour qu'un projet django soit testé facilement, il doit se déployer et se lancer facilement ! C'est certes l'occasion de peaufiner l'automatisation, mais ce n'est pas toujours évident quand il y a du geodjango, du celery … Je vais tenter de partager mes notes dans ce billet.
Le minimum requis
Pour l'installation de Jenkins, rien de plus simple (sur debian)
sudo aptitude install jenkins
Mais il va falloir lui donner de quoi télécharger votre code sur git et parfois compiler les librairies python nécessaires
sudo aptitude install git-core sudo aptitude install python-dev build-essential python-virtualenv
Les plugins Jenkins indispensables :
- covertura
- Violations
- GIT
- Green Balls
- Continuous Integration Game
Organisation du projet Django
Dans ce billet, j'utilise pip, comme beaucoup de djangonautes. Je présenterai la même chose avec buildout dans un autre billet.-
Définition des dépendances globales dans requirements.txt
Django>=1.3 south
-
Définition des dépendances liées aux tests dans requirements-testing.txt
django-jenkins
-
Ajout d'un fichier pylint.rc pour régler les niveaux d'alerte PEP-8
[MESSAGES CONTROL] disable=E1101,E1103,C0111,I0011,I0012,W0704,W0142,W0212,W0232,W0613,W0702,R0201 ... ...
-
Modèle de settings de tests dans project/test_settings.py
from default_settings import *
DEBUG = True
TEMPLATE_DEBUG = DEBUG
INSTALLED_APPS += (
'django_jenkins',
)
PYLINT_RCFILE = os.path.join(PROJECT_ROOT_PATH, '..', 'conf', 'pylint.rc')
Configuration du job Jenkins
Les informations de la présentation de Nicolas suffisent pour démarrer.
J'ai noté cependant qu'il fallait lancer manage.py depuis un répertoire parent au projet pour que l'exploration du code source fonctionne.
Pour profiter de la magie des ingrédients précédents, nous aurons donc juste à ajouter un bloc script shell, qui installe les dépendances listées, pose les settings de test et migre la base (avec South):
#!/bin/bash -ex
virtualenv --quiet ve
source ./ve/bin/activate
pip install -E ./ve -r $WORKSPACE/requirements.txt
pip install -E ./ve -r $WORKSPACE/requirements-testing.txt
cp $WORKSPACE/project/test_settings.py $WORKSPACE/project/local_settings.py
python $WORKSPACE/project/manage.py syncdb --noinput
python $WORKSPACE/project/manage.py migrate
deactivate
et celui-ci pour lancer les tests proprements dits :
#!/bin/bash -ex
virtualenv --quiet ve
source ./ve/bin/activate
python $WORKSPACE/project/manage.py jenkins yourapps
deactivate
Pour un projet SIG
Il faut installer certaines librairies SIG sur le serveur Jenkins.
sudo aptitude install libproj0 libgeos-c1
Si le besoin de cloisonner ces librairies pour chaque projet se fait ressentir, il faut utiliser des outils comme minitage.
Spatialite au lieu de PostGIS comme base de tests
sudo aptitude install python-sqlite libspatialite2 sqlite3
Script d'initialisation
wget http://www.gaia-gis.it/spatialite/init_spatialite-2.3.zip -O /tmp/init_spatialite-2.3.zip
cd /usr/local/lib/
sudo unzip /tmp/init_spatialite-2.3.zip
avec dans test_settings.py
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
...
...
SPATIALITE_SQL=os.path.join('usr', 'local', 'lib', 'init_spatialite-2.3.sql')
Si pysqlite n'a pas été compilé avec les extensions C (Erreur: The pysqlite library does not support C extension loading.) il faut recompiler !
sudo aptitude install libsqlite3-dev
wget http://pysqlite.googlecode.com/files/pysqlite-2.6.3.tar.gz
tar -zxvf pysqlite-2.6.3.tar.gz
cd pysqlite-2.6.3
sed -i s/define=SQLITE_OMIT_LOAD_EXTENSION/#define=SQLITE_OMIT_LOAD_EXTENSION/g setup.cfg
source ./ve/bin/activate
python setup.py install
Pour un projet Celery
Kombu au lieu de RabbitMQ comme gestionnaire de messages
requirements-testing.txt
kombu djkombu
test_settings.py
INSTALLED_APPS += (
'djkombu',
)
CARROT_BACKEND = "django"
Pour désactiver la parallélisation lors des tests
CELERY_ALWAYS_EAGER = True
Formations associées
Formations Django
Formation Django avancé
À distance (FOAD) Du 9 au 13 décembre 2024
Voir la formationActualités en lien
Mini-guide à l’usage des collectivités : l’Open Data, entre nécessité et opportunité
Tout ce que vous avez toujours voulu savoir sur l’Open Data. Petit guide à destination des collectivités pour l’appréhender et se l’approprier.
Une rentrée riche autour de la donnée et des rencontres pour Makina Corpus Territoires
Chaque rentrée apporte son lot d’opportunités pour faire avancer les projets autour de la données au service des territoires. Le calendrier de Makina Corpus en la matière a été particulièrement dense en événements.
GeoDatadays 2024 : retrouvez-nous et participez à nos conférences
Les 19 et 20 septembre, participez aux conférences animées par nos experts SIG aux GeoDataDays 2024, en Pays de la Loire à Nantes.