Journal Hudson, l'aigle de l'intégration continue

Posté par  (site web personnel) .
16
31
mai
2010
Hudson est un projet Open Source d'intégration continue qui s'est fait remarquer ces derniers temps par son essor fulgurant aux dépends de ses concurrents.

L'intégration continue est LE concept en vogue pour développer ses logiciels de façon professionnelle. Car que faire une fois que l'on vient de se doter d'un système de gestion de configuration et que les développeurs commencent à y remonter régulièrement leurs modifications ? Il faut automatiser le processus de build des WAR, des EAR, lancer des actions en fonction du succès, de l'échec, prévenir les équipes responsables du code, etc, etc. C'est exactement l'objet de  l'intégration continue : faciliter l'intégration de petites parties de code en provenance de différents développeurs pour éviter les situations complexes de conflits ou de versioning.

Hudson fait donc tout cela : il s'installe en quelques clics sous forme de WAR, se configure via son interface WEB claire et complète et n'attend plus que des projets de développement à builder. Il est capable de lancer et traiter les résultats des tests unitaires (JUnit et TestNG) et réagit en conséquence. Qu'un build se passe mal et le développeur du code peut immédiatement être prévenu via mail, flux RSS ou messagerie instantanée.

Ces fonctionnalités sont assez communes chez ses concurrents comme Apache Continuum, Cruise Control ou IBM Rational Build Forge. Cependant Hudson dispose d'une fonctionnalité intéressante : il propose de répartir la charge de build des projets sur plusieurs machines ce qui est parfois réservé à la version payante voir tout simplement impossible avec d'autres environnements d'intégration continue.

Hudson est aussi capable de présenter différentes métriques des précédents builds comme par exemple le temps moyen de build (en rouge ceux en erreur) et bien d'autres.

Le dernier atout d'Hudson est sa conception très orientée vers les plugins. Même s'il ne supporte nativement que les gestionnaires de version SVN et CVS, des plugins existent déjà pour supporter Git, Perforce, ClearCase et bien d'autres ! Ses possibilités ne sont donc encore une fois limitées que par l'imagination de ses utilisateurs.

L'article de Développez.com s'avère être une très bonne initiation technique qui peut s'utiliser en parallèle avec la documentation officielle claire et concise.
  • # Précisions

    Posté par  (site web personnel) . Évalué à 5.

    Un avis parmi tant d'autres : http://blog.loof.fr/2009/05/continuum-vs-bamboo-vs-hudson.ht(...)

    Et sinon continuum, c'est :
    - du parallel build
    - du distributed build
    - une API complète pour le pilotage distant
    - des métriques de build
    - et surtout : une interface graphique moche :-)

    Quant à hudson, le blog qu'il faut suivre :
    http://kohsuke.org/
    • [^] # Re: Précisions

      Posté par  . Évalué à 2.

      J'en profite pour vous demander si vous connaissez des outils d'intégration continue multi plateforme et multi langages :
      Je cherche quelque chose qui permette de lancer des compilations en C, C++, avec des scripts d'installation NSIS (entre autres), et qui puisse être exécuté (les "builders" du moins) sous Windows ou Linux.
      J'ai trouvé BuildBot (http://buildbot.sourceforge.net/), mais c'est à peu près tout ...
      • [^] # Re: Précisions

        Posté par  . Évalué à 4.

        Ca peut se faire avec hudson. Par contre, il faudra scripter les interactions utilisateur de tes installation si une simple ligne de commande suffit pas.
      • [^] # Re: Précisions

        Posté par  (site web personnel) . Évalué à 2.

        Hudson n'est pas lié à une plateforme ou à un langage. Je l'utilise pour des projets C++ et Java sans problème.

        Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

        • [^] # Re: Précisions

          Posté par  . Évalué à 2.

          Ce n'est pas évident sur leur site.
          Par contre, si j'en crois ce site : http://confluence.public.thoughtworks.org/display/CC/CI+Feat(...)
          , Hudson ne gère par Make.
          Et comme il est hors de question de reprendre tous les makefile pour le mettre à la sauce Maven ou Nant ou que sais-je ...
          • [^] # Re: Précisions

            Posté par  . Évalué à 1.

            Au temps pour moi.
            Après quelques recherches, il semble assez facile d'utiliser Hudson sur des projets C, C++.
            Je vais creuser le sujet, j'ai l'impression que BuildBot est un peu au point mort ...
            • [^] # Re: Précisions

              Posté par  (site web personnel, Mastodon) . Évalué à 2.

              Perso, mettre un JRE sur mon serveur de gestion de version/gestion de bugs, ça me fait un peu chier.
              Et puis comme j'ai déjà un Python sur la machine, je préfèrerai mettre Buildbot.
              Après, c'est juste une question de goût.

              Allez, un petit lien http://olivier.ramonat.free.fr/svn_trac_buildbot/svn_trac_bu(...)
              • [^] # Re: Précisions

                Posté par  . Évalué à 1.

                Je connais ce document ... il date de 2006, et je n'ai pas l'impression que BuildBot ait beaucoup évolué depuis (mais je peux me tromper).
                Je l'ai mis en place, sur un projet "pilote", mais j'aimerais être sûr d'avoir misé sur le bon cheval.
                Et si Hudson est en plein essor, ce n'est peut-être pas pour rien.
                Je vais voir s'il est possible de jouer un peu avec Hudson pour comparer ...
                • [^] # Re: Précisions

                  Posté par  (site web personnel, Mastodon) . Évalué à 4.

                  Pour moi, les fonctionnalités fournies par BuildBot sont suffisantes donc qu'il n'ait pas évolué depuis quatre ans ne me pose pas plus de problème que ça.
                  Après tout, LateX n'a pas évolué depuis des lustres et personne ne s'en plaint vraiment ;-)
              • [^] # Re: Précisions

                Posté par  (site web personnel) . Évalué à 3.

                Je ne vois pas en quoi ce serait pénalisant d'installer une machine virtuelle, c'est probablement en package dans ta distribution (vive OpenJDK).

                Et Hudson est très facile à installer. Le plus simple c'est de lancer

                java -jar hudson.jar

                Sinon, il y a des moyens d'interfacer Hudson avec Apache httpd aussi ...
                • [^] # Re: Précisions

                  Posté par  . Évalué à 2.

                  ce que je trouve trop fort avec hudson, c'est la gestion des machines esclaves. Tu configures ton acces ssh, et hop, il se connecte, check la version de java, télécharge une machine virtuel pour la machine cible si nécessaire, injecte sa petite application slave hudson, et hop, lance les jobs... Ca c'est TROP TROP fort. Rien à configurer sur la machine eclave (juste que le build systeme tourne).
          • [^] # Re: Précisions

            Posté par  (site web personnel) . Évalué à 2.

            Certains systèmes de construction ont une prise en charge sous forme de plugins, pour les autres, Hudson permet de lancer des commandes.

            Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

          • [^] # Re: Précisions

            Posté par  (site web personnel) . Évalué à 2.

            Hudson ne gère par Make.

            Hudson gère très bien make, je l'utilise pour compiler mes projets Ada.

            Dans la configuration, tu peux ajouter une étape "Execute Shell" et tu tapes ta ligne de commande make. je ne vois pas vraiment ce qu'il pourrait faire de plus. En tout cas, c'est largement suffisant pour la plupart des usages je dirais.
            • [^] # Re: Précision

              Posté par  . Évalué à 1.

              Et pour être encore plus précis,je dirais que Hudson gère Make, comme il peut gérer à peu près n'importe quoi qui se lance en ligne de commande. C'est bien là sa force.
              En fait, dès lors que vous avez un exécutable (script ou programme compilé), vous pouvez demander à Hudson qu'il s'occupe de le lancer de façon régulière, pourvu que l'exécutable en question retourne 0 qd tout est OK et quelque chose de non nul sinon.
              Et pour finir, il faut comprendre que bien que né dans un monde java, et fort riche en plugins liés au génie logiciel Java, Hudson n'est pas un outil à réserver aux environnemments java.
  • # A que coucou

    Posté par  (site web personnel) . Évalué à 3.

    Encore un beau journal ou on n'a rien compris au final.

    En français dans le texte, ce serait mieux ;-)
    • [^] # Re: A que coucou

      Posté par  . Évalué à 10.

      Dicton français du jour:

      "C'est pas en râlant comme un putois sur tous les journaux qui ont trait à Java que Perl sera plus compréhensible"
    • [^] # Re: A que coucou

      Posté par  . Évalué à 3.

      Et si tu es un développeur, c'est bien triste (mais ton post me fait croire que non ;) ) car l'intégration continue ( http://fr.wikipedia.org/wiki/Int%C3%A9gration_continue ) est aujourd'hui une évidence pour tout projet de plus d'1 développeur.

      Facile a mettre en oeuvre et avec que des avantages...
      • [^] # Re: A que coucou

        Posté par  (site web personnel) . Évalué à 3.

        Je suis admin système et je développe des petits trucs mais pas bien gros. On développe dans mon labo des gros trucs mais en Fortran pour la plupart (c'est du calcul numérique) et tout le jargon du Java n'est pas encore intégré au fortran ;-)
    • [^] # Re: A que coucou

      Posté par  (site web personnel) . Évalué à 3.

      En gros, t'as une sorte de svn, un système de build qui ressemble à make (ou tu as une sorte de gestionnaire de paquet avec gestion des dépendances dedans),
      et des outils d'analyse de la qualité de code.
      Le Hudson machin permet de faire marcher tout ça ensemble :
      il fait régulièrement un build de ton code, et te pond automatiquement un site avec les indicateurs de qualité de code pour l'ensemble du projet.
      S'il détecte des problèmes, il peut envoyer un mail au type qui a commité le code qui a enclenché le problème.

      « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

      • [^] # Re: A que coucou

        Posté par  . Évalué à 2.

        L'intégration continue (CI) n'est pas l'apanage de SVN et des VCS centralisés.
        C'est pas moi qui le dit mais Martin Fowler himself:
        http://martinfowler.com/bliki/FeatureBranch.html

        On a parfois un peu l'impression que l'intégration continue, c'est la solution qu'ont trouvé pour développer ceux qui ont peur de faire des branches.
        L'article de Martin montre qu'il s'agit avant tout de discipline et de méthode.

        En revanche, s'affranchir de la CI lorsqu'elle montre ses limites ou n'est pas adaptée est beaucoup plus problématique avec un outil qui gère mal les branches, les merges cycliques et qui ne sait pas tracer le renommage de fichier comme ... SVN
    • [^] # Re: A que coucou

      Posté par  . Évalué à 2.

      Coucou!
      bouahahah.


      c'est de l'intégration continue, grosso merdo ca permet de faire des test (des rapport de "qualité") tout le temps.


      Pour faire cela facilement les outils nommé permette de lancer un certain nombre de tache a partir de différent évement s (cron, nouvelle version dans le VCS, ..etc) et d'afficher ca dans de belle page web avec des beaux graphiques et d'engueuler le monsieur qui a rajouté un patch qui fait foirer les test.

      ca permet de lier un VCS, un système de build et des tests automatiques.

      Un de ces outils est hudson, il est assez bien fait : plein de plugins assez utiles, permet de gérer assez facilement un ensemble de machine, assez pratique avec des machines de compilation et des machines de tests .

      C'est assez sympathique, si on a une suite de tests
      • [^] # Re: A que coucou

        Posté par  (site web personnel) . Évalué à 2.

        OK, ca a l'air intéressant. Est-ce assez générique pour fonctionner sur du Fortran ?

        Ca m'a l'air très Java et très << XML Inside >> le peu que je viens de regarder. Est-ce facile à utiliser sur autre chose que sur Java ? Y-a-t'il des équivalents ou les fichiers de configuration ne sont pas en XML ?
        • [^] # Re: A que coucou

          Posté par  (site web personnel) . Évalué à 1.

          En gros, oui. plus detaillé:

          - la conf globale de hudson est en xml, mais on s'en fou, tu la fait sur une interface graphique
          - tu definis des taches lies a ton projet. Par exemple une tache qui recupere/update un projet du svn a chaque commit et qui lance un script. Ce script peut etre par exemple un ant Java (xml donc) pour un projet java, mais aussi n'importe quoi d'autre. C'est tres souple a ce niveau.
          • [^] # Re: A que coucou

            Posté par  . Évalué à 2.

            le plus chiant c'est de générer un rapport junit ou compatible avec tes test fortrans, je sais pas si c'est possible. Sinon tu codes un plugin d'analyse de tes fichiers résultats (test réussi, failed,...).

            Et hop !
        • [^] # Re: A que coucou

          Posté par  . Évalué à 3.

          C'est assez generique pour travailler avec n'importe quoi,
          Je l'utilise avec des makefile (ou autre system de build : les taches peuvent aussi etre des script shell, on peu tout faire)

          Pour bien l'utiliser il faut avoir des tests qui sortent du XML, format JUnit,

          Pour la configuration : l'interface web suffit,le gros avantage : pas de dependances pour l'installation (pas de serveur web a installer, configurer, pas de framework X Y Z J2EE a lancer et configurer..)


          Je fait marcher ca avec du bon vieux C, des makefile et avec un framework de test d'integration en perl qui crache du XML (et du XLS pour le chef)

          <testsuite errors="0" failures="5" hostname="xxxxx" name="xxxx" tests="174" time="4291" timestamp="2000-01-01T15:00:00">
          <properties>
          </properties>
          <testcase classname="-.1-regressionTests" name="Regression tests" time="4291">
          <failure message="test failedregressionTests" type="myTestError">
          </failure>
          <failure message="Failed SubTest" type="myTestError">
          SubTest RestartNode Failed
          SubTest PowerFailure Failed
          </failure>
          </testcase>
          <testcase classname="-.1-regressionTests.1-XXXX" name="Test Case 1 : XXXXX" time="49">
          </testcase>
          <system-out></system-out>
          <system-err></system-err>
          </testsuite>
      • [^] # Re: A que coucou

        Posté par  (site web personnel, Mastodon) . Évalué à 2.

        <mauvais_esprit>
        On peut y ajouter un plugin de correction orthographique ?
        </mauvais_esprit>
  • # A propos de buildbot

    Posté par  . Évalué à 3.

    Certains avaient l'air de se poser la question, mais buildbot fonctionne parfaitement. Le projet est maintenu : http://buildbot.net/trac/timeline

    Je m'en suis servis sans problèmes avec un projet C++ de 20+ kslocs avec cmake sur freebsd/linux/windows 7 avec gcc et msvc.

    Buildbot est par exemple utilisé par chrome : http://build.chromium.org/buildbot/waterfall/console

    Je n'ai pas encore testé Hudson.
  • # Ça existe en mutualisé ?

    Posté par  . Évalué à 2.

    Il existe des solutions mutualisé (forge logiciel) pour les étudiants qui n'ont pas de serveur à eux (comme il existe des hébergeurs de code) ?

    Ça peut s'intégrer à des forges ou c'est deux trucs séparé ?

    Parce que ça m'a l'aire bien intéressant déjà pour le développement des projets à la fac :)

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.