tite fractale

Intégration continue avec Travis

Activité de 2h.

1. L’intégration continue en quelque mots

L’intégration continue consiste à déclencher un ensemble de tâches à chaque fois qu’un développeur valide une modification sur un projet (surtout par exemple après un push). Quelques exemples de tâches :

Quatres niveaux de tests :
  1. unitaires
  2. d'intégration
  3. systèmes = de qualification = fonctionnels, possible d’en automatiser certains ici
  4. d'acceptation = de recette

Tests système ou de qualification : on vérifie que le logiciel est conforme aux exigences attendues par le client. Il faut vérifier que l’application est fonctionnellement correcte et qu’elle s’intègre bien au système d’information déjà existant chez le client, homologation de l'application, tests de l'ergonomie de l'IHM. Ce niveau de tests est réalisé par un testeur qualifié.

L'intégration continue est de niveau tests fonctionnels (niveau 3) et non pas tests d'intégration (niveau 2).

Avec Travis, les environnements sont recréés à partir de zéro à chaque fois.

Machines virtuelles.

Cela permet d’être sûr que le projet ne dépend pas d’une configuration locale particulière, ou qu’un précédent test a laissé traîné des fichiers ou des entrées dans la base de données. Tout est maîtrisé.

Très utilisée dans les méthodes agiles, l’intégration continue suppose une très bonne préparation en amont. Voir l’article Wikipedia.

Attention, il peut parfois être intéressant de déclencher des tâches avant même de valider (pre commit hooks). Voir :

2. Démarrer avec Travis

2.1. Connection à Travis via un compte Github

2.2. Activer le hook pour le projet

2.3. Ajout du .travis.yml

Cloner le dépôt, aller dans le clone, puis créer, commiter et pousser les fichiers .travis.yml et mytestmodule.py décrits ci-après.

2.3.1. Premier .travis.yml avec Python

Ce fichier décrit les différentes tâches que Travis va accomplir sur votre projet. Le format est le YAML (article Wikipedia).

.travis.yml :

language: python
python:
  - "2.6"
  - "2.7"
  - "3.2"
  - "3.3"
# no dependency to install
script: python mytestmodule.py

Pour plus d’information, voir la page Python sur travis-ci.org :

2.3.2. Un faux module de test

Le fichier Python, mytestmodule.py contient à la fois la fonctionnalité à tester et les tests. Les tests sont codés sous la forme de doctests. On aurait pu simplement ajouter à la fin :
assert(test_proc(42) == 43).

mytestmodule.py :

"""Fake module to test tests."""

def test_proc(x):
    """Fake procedure to test doctests.

    >>> test_proc(42)
    43

    """
    return x

if __name__ == "__main__":
    import doctest
    doctest.testmod(raise_on_error=True)

Après que vous avez poussé sur votre dépôt Github, Travis met votre projet dans la file d’attente, et le résultat arrive sur :

Pour être notifié par email, il faut bien le configurer dans votre client git, ou suivre la doc.

Malheureusement, ce script ne montre pas les détails de l’erreur (43 au lien de 42).

Réparez l’erreur, commitez et poussez, et vérifiez que tout s’est bien passé, par exemple sur Github..

2.3.3. Premier .travis.yml avec PHP

.travis.yml :

language: php
php:
  - "5.5"
  - "5.4"
  - "5.3"

Remarquez que la tâche de test n’étant pas précisée, Travis va utiliser PHP Unit par défaut (voir la documentation en anglais, en français).

Sans argument sur la ligne de commande, PHPUnit cherche un fichier phpunit.xml à la racine du projet, qui lui dira où sont les tests. Avec le fichier ci-dessous, ils sont supposés être dans le répertoire courant ., c’est-à-dire à la racine. Ainsi, tout fichier dont le nom se termine par Test.php à la racine sera considéré comme un test.

phpunit.xml :

<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true">
    <testsuites>
        <testsuite name="Test Suite">
            <directory>.</directory>
        </testsuite>
    </testsuites>
</phpunit>

Voici un exemple simple de fichier .php contenant un test il suffit d’hériter de PHPUnit_Framework_TestCase. Toutes les méthodes seront exécutées.

MonTest.php :

<?php
class TravisTest extends PHPUnit_Framework_TestCase
{
    public function testSimple()
    {
        $this->assertEquals(0, 1);
    }
}
?>

Pour plus d’information, voir la page PHP sur travis-ci.org :

2.3.4. Validation du .travis.yml

Si le .travis.yml est mal nommé ou mal formé, il est ignoré silencieusement. Il peut donc être important de :

3. En résumé

L’intégration continue permet :

Attention, ici GitHub ne fait pas d’intégration continue. Le qui, c’est Travis.

4. Pour aller plus loin

Les idées notées ici, après la première section, sont valables pour toutes les plateformes d’intégration continue.

4.1. Comment fonctionne Travis

Voir la documentation en anglais, en français.

4.2. Idées de tâches

4.3. Idées de notifications

Voir la documentation en anglais, en français.

Ce n’est pas exactement une notification, mais une petite icône est disponible pour indiquer le statut du projet. Par exemple celle du projet travis-ci :

statut

Voir la documentation en anglais, en français.

4.4. Configuration avancée




Christophe Gragnic, le 15/01/2015, 22h18'12".






Page générée le 27/05/2021, 09h06'59" (source).
historique de la page
historique global