grimboite/articles/dev/2016-08-05-framagit-continu...

5.3 KiB

Title Date Slug Tags
Intégration continue sur Gitlab 2016-08-05 integration-continue-gitlab ci, intégration, gitlab, flake8, coverage

J'ai récemment créé un nouveau projet sur Framagit, qui propose une des dernières versions de Gitlab, avec son module d'intégration continue. Cela devient juste super facile de mettre un process d'intégration continue sur son projet :-)

Pour mon projet Django, j'ai ajouté deux dépendances (bon, trois, avec Django): coverage et django_coverage_plugin dans un fichier requirements/dev.txt:

# requirements/base.txt
django
# requirements/dev.txt
-r base.txt
coverage
django_coverage_plugin

On crée ensuite un fichier .gitlab-ci.yml à la racine du projet, avec le contenu suivant:

before_script:
    - pip install -r requirements/dev.txt

test:python-3.4:
    stage: test
    image: python:3.4-slim
    script:
    - coverage run src/manage.py test sherlock
    - coverage report -m

Les paramètres importants sont:

  • L'image qui spécifie l'image Docker à utiliser (sans quoi les binaires python ne seront par exemple pas disponible). En fonction du langage utilisé, choisissez une autre image.
  • Et la partie script. Ici, sherlock est le nom de mon application Django; elle se situe dans le sous-répertoire src/.

En bonus

Pour avoir le pourcentage de couverture de code, ajoutez, dans les paramètres du projet, la valeur \d+\%\s*$ à l'option test coverage parsing.

Au niveau du fichier README.md, ajoutez le contenu suivant: [![build status](https://framagit.org/Grimbox/heima/badges/master/build.svg)](https://framagit.org/Grimbox/heima/commits/master)

Résultat

Résultat, les dépendances sont installées, les tests sont lancés et la couverture de code indique un pourcentage qui est chopée au passage par la regex ci-dessus. Magique. Petit badge de réussite sur la page d'accueil, couverture de code indiquée sur les tests, tout va bien.

Running with gitlab-ci-multi-runner 1.4.1 (fae8f18)
Using Docker executor with image python:3.4-slim ...
Pulling docker image python:3.4-slim ...
Running on runner-ed7dbd37-project-7675-concurrent-0 via ruth...
Fetching changes...
HEAD is now at ff9e6aa add coverage
From https://framagit.org/Grimbox/heima
+ ff9e6aa...aaf716d master     -> origin/master  (forced update)
Checking out aaf716d6 as master...
$ pip install -r requirements/dev.txt
Collecting django (from -r requirements/base.txt (line 1))
Downloading Django-1.10-py2.py3-none-any.whl (6.8MB)
Collecting coverage (from -r requirements/dev.txt (line 2))
Downloading coverage-4.2.tar.gz (359kB)
Collecting django_coverage_plugin (from -r requirements/dev.txt (line 3))
Downloading django_coverage_plugin-1.3.1.tar.gz
Collecting six>=1.4.0 (from django_coverage_plugin->-r requirements/dev.txt (line 3))
Downloading six-1.10.0-py2.py3-none-any.whl
Installing collected packages: django, coverage, six, django-coverage-plugin
Running setup.py install for coverage: started
    Running setup.py install for coverage: finished with status done
Running setup.py install for django-coverage-plugin: started
    Running setup.py install for django-coverage-plugin: finished with status done
Successfully installed coverage-4.2 django-1.10 django-coverage-plugin-1.3.1 six-1.10.0
$ coverage run src/manage.py test sherlock
....
----------------------------------------------------------------------
Ran 4 tests in 0.024s

OK
Creating test database for alias default...
Destroying test database for alias default...

$ coverage report -m
Name                                      Stmts   Miss  Cover   Missing
-----------------------------------------------------------------------
src/heima/__init__.py                         0      0   100%
src/heima/settings.py                        18      0   100%
src/manage.py                                13      6    54%   9-21
src/sherlock/__init__.py                      0      0   100%
src/sherlock/admin.py                         8      0   100%
src/sherlock/migrations/0001_initial.py       7      0   100%
src/sherlock/migrations/__init__.py           0      0   100%
src/sherlock/models.py                       18      0   100%
src/sherlock/tests.py                        30      0   100%
-----------------------------------------------------------------------
TOTAL                                        94      6    94%
Build succeeded

Intégration avec Flake8

[Update du 08/08/2016]

Toujours dans la même veine, on peut pousser l'intégration avec [Flake8]({{< relref "2015-08-19-pep8.md" >}}). Il suffit d'ajouter flake8 dans les prérequis, ainsi qu'un fichier .tox.ini dans lequel on trouvera le contenu suivant:

[flake8]
max-line-length = 100
exclude = migrations, manage.py

On modifie ensuite le fichier .gitlab-ci.yml pour y ajouter l'intégration flake8:

before_script:
- pip install -r requirements/dev.txt

test:python-3.4:
    stage: test
    image: python:3.4-slim
    script:
        - flake8 src/
        - coverage run src/manage.py test sherlock
        - coverage report -m

Attention que si flake8 renvoie le moindre avertissement, l'intégration continue du projet passera en failed.