|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: Travis-CI l'intégration continue sans effort |
| 4 | +author: loicfrering |
| 5 | +tags: [ci, travis, php, nodejs, ruby, clojure, erlang] |
| 6 | +published: false |
| 7 | +--- |
| 8 | + |
| 9 | +Aujourd'hui je souhaite vous parler d'un projet qui me tient |
| 10 | +particulièrement à cœur : [Travis CI](http://travis-ci.org/), une |
| 11 | +plateforme d'intégration continue simple et efficace. C'est un projet |
| 12 | +auquel je tiens puisque j'y contribue et gère le support de PHP avec |
| 13 | +l'aide et aux côtés de l'[équipe de |
| 14 | +contributeurs](https://github.com/travis-ci/) que je remercie au passage |
| 15 | +et qui mettent à disposition de la communauté open source cet outil plus |
| 16 | +que pratique ! |
| 17 | + |
| 18 | + |
| 19 | + |
| 20 | +Sa devise ? "A distributed build system for the open source community." |
| 21 | +A l'initiative de la communauté Ruby, Travis est donc une plateforme |
| 22 | +d'intégration continue ouverte et distribuée mise à disposition sous |
| 23 | +forme de service. Ouverte car tout projet public publié sur Github peut |
| 24 | +mettre en place son intégration continue sur Travis. Et distribuée car |
| 25 | +Travis s'occupe de distribuer les builds de vos projets sur des workers |
| 26 | +dont nous détaillerons le fonctionnement plus loin. |
| 27 | + |
| 28 | +## Face aux autres plateformes d'intégration continue |
| 29 | + |
| 30 | +Et donc quels avantages face aux Jenkins/Hudson, CruiseControl et autres |
| 31 | +? En quoi Travis CI se démarque-t-il de la concurrence ? |
| 32 | + |
| 33 | +Tout d'abord, Travis se présente en mode **service**, aucune |
| 34 | +installation nécessaire, pas d'infrastructure à mettre en place ! |
| 35 | +Travis héberge **gratuitement** l'intégration continue des projets open |
| 36 | +source et sa **mise en place est très facile** comme nous le verrons un |
| 37 | +peu plus loin. |
| 38 | + |
| 39 | +Chaque build de votre projet s'exécute dans une **machine virtuelle |
| 40 | +dédiée** : vous disposez d'un environnement complet pour votre build, |
| 41 | +vous pouvez installer ce que vous voulez sur cet environnement et cela |
| 42 | +n'affectera pas les autres projets buildés par Travis de la même manière |
| 43 | +que les autres projets ne viendront pas perturber le votre. |
| 44 | + |
| 45 | +De plus chaque build se déroule dans une **sandbox** : après l'exécution |
| 46 | +du build, une snapshot propre de la machine virtuelle restaure son état, |
| 47 | +aucun risque de casser votre environnement. |
| 48 | + |
| 49 | +Enfin, l'**infrastructure est distribuée**, tout d'abord le front est totalement |
| 50 | +découplé des workers puis Travis provisionne pour vous un pool de |
| 51 | +workers capable de dépiler le flot de build de tous les projets gérés |
| 52 | +par Travis. Les charges du front et de chacun des workers sont |
| 53 | +indépendantes. |
| 54 | + |
| 55 | +Travis supporte actuellement les langages suivants : |
| 56 | + |
| 57 | +* Clojure |
| 58 | +* Erlang |
| 59 | +* JavaScript avec Node.js |
| 60 | +* PHP |
| 61 | +* Ruby |
| 62 | + |
| 63 | +Une des forces de Travis est de permettre de **tester vos applications |
| 64 | +sur plusieurs versions du langage** que vous utilisez. Vous faites du |
| 65 | +Ruby ? Vous pouvez tester votre projet sur Ruby 1.8.7, Ruby 1.9.3 ou |
| 66 | +même Ruby HEAD (version de développement courante), JRuby ou Rubinius. |
| 67 | +Vous faites du nodejs, hop testez vos packages sur nodejs 0.4 ou 0.6. |
| 68 | +Vous faites du PHP, vous pouvez tester votre projet sur PHP 5.3.8, |
| 69 | +5.4.0RC4 et même 5.2.17 ! |
| 70 | + |
| 71 | +Votre application doit être testée sur plusieurs bases de données |
| 72 | +différentes ? Travis supporte MySQL, PostGreSQL, SQLite, MongoDB, |
| 73 | +CouchDB, Riak et Redis. En combinant les versions du langage testées et |
| 74 | +les différents envronnements à votre disposition, vous obtenez une |
| 75 | +**build matrix** garantissant que vos tests passent sur l'ensemble de |
| 76 | +ces combinaisons ! |
| 77 | + |
| 78 | +Ainsi il est possible de tester vos projets sur des dizaines de |
| 79 | +combinaisons de version de langage et de configuration d'environnement |
| 80 | +différentes. Voyez par exemple comment [Sinatra joue ses tests sur près |
| 81 | +de 30 combinaisons |
| 82 | +différentes](http://travis-ci.org/#!/sinatra/sinatra). De la même |
| 83 | +manière, [FOSUserBundle garanti son bon |
| 84 | +fonctionnement](http://travis-ci.org/#!/FriendsOfSymfony/FOSUserBundle) |
| 85 | +non seulement sur PHP 5.3 et 5.4 mais aussi sur 3 versions différentes |
| 86 | +de Symfony2 ! Tout ceci grace à Travis qui permet d'améliorer de façon |
| 87 | +significative la robustesse et la fiabilité de nombreux projets open |
| 88 | +source ! Il est aussi fréquent de découvrir des bugs sur les différentes |
| 89 | +versions en cours de développements des langages supportés par Travis. |
| 90 | + |
| 91 | +## Contraintes |
| 92 | + |
| 93 | +Bien entendu Travis vient aussi avec quelques contraintes qu'il faudra |
| 94 | +mesurer en fonction de ce que vous attendez de votre intégration |
| 95 | +continue. |
| 96 | + |
| 97 | +Tout d'abord, Travis est pour l'instant fortement couplé à Git et |
| 98 | +Github, il est nécessaire que votre projet soit public sur Github pour |
| 99 | +profiter de Travis. Cependant le support d'autres repositories Git et |
| 100 | +des repositories privés est dans le pipe. |
| 101 | + |
| 102 | +Pour l'instant et même si toutes les briques de Travis sont open source, |
| 103 | +il n'est pas aisé d'installer un environnement Travis privé et dédié. |
| 104 | + |
| 105 | +Travis a tout d'abord été conçu pour la communauté open source. |
| 106 | + |
| 107 | +## Mise en place |
| 108 | + |
| 109 | +Vous avez un projet sur Github ? La première étape pour mettre en place |
| 110 | +son itégration continue sur Travis est d'y placer à la racine un fichier |
| 111 | +[.travis.yml](http://about.travis-ci.org/docs/user/getting-started/#step-three-add-travisyml-file-to-your-repository) |
| 112 | +décrivant comment doit se dérouler votre build. La configuration de |
| 113 | +Travis est très souple et permet la définition des fameuses combinaisons |
| 114 | +mentionnées un peu plus tôt. |
| 115 | + |
| 116 | +Pour la seconde étape il suffit de vous rendre sur travis-ci.org, de |
| 117 | +vous authentifier automatiquement via l'OAuth de Github et vous pourrez |
| 118 | +activer l'intégration continue de vos projets, c'est aussi simple que |
| 119 | +cela ! |
| 120 | + |
| 121 | +Pour plus d'informations, référez-vous au [Getting |
| 122 | +Started](http://about.travis-ci.org/docs/user/getting-started/) de la |
| 123 | +documentation. N'hésitez pas à suivre les sections spécifiques à votre |
| 124 | +langage de prédilection. |
| 125 | + |
| 126 | +## Technologies |
| 127 | + |
| 128 | +Travis est principalement écrit en Ruby et repose sur un ensemble de |
| 129 | +technologies modernes et innovantes qui lui donnent les caractéristiques |
| 130 | +détaillées plus haut : |
| 131 | + |
| 132 | +* [AMQP](http://bit.ly/amqp-model-explained) avec |
| 133 | + [RabbitMQ](http://www.rabbitmq.com/) pour le messaging et la |
| 134 | + distribution des builds. Plusieurs clients sont utilisés en |
| 135 | + particulier Hot Bunnies, projet dans lequel l'un des core contributor de |
| 136 | + Travis est fortement impliqué. Il s'agit d'un client JRuby construit sur |
| 137 | + la base du client Java pour RabbitMQ maintenu par SpringSource, une |
| 138 | + preuve de la pertinence de la cohabitation JVM/JRuby. |
| 139 | +* [JRuby](http://jruby.org/) pour profiter de certaines librairies Java |
| 140 | + et des performances |
| 141 | +* [Vagrant](http://vagrantup.com/) pour la gestion des machines virtuelles |
| 142 | +* [Chef](http://wiki.opscode.com/display/chef/Home) pour le |
| 143 | + provisionning des machines virtuelles |
| 144 | +* [WebSockets](http://en.wikipedia.org/wiki/WebSocket) par |
| 145 | + l'intermédiaire de [Pusher](http://pusher.com/) pour la mise à jour |
| 146 | + des logs de build en temps réel |
| 147 | +* [Rails](http://rubyonrails.org/) pour le front côté serveur |
| 148 | +* [Ember.js](http://emberjs.com/) (successeur de SproutCore 2) pour la |
| 149 | + RIA côté client |
| 150 | + |
| 151 | +## A ce jour |
| 152 | + |
| 153 | +A ce jour, Travis lance les builds de plus de 4200 repositories à raison |
| 154 | +de 2000 builds par jour en moyenne ! L'intégration continue de projets |
| 155 | +très prestigieux est gérée par Travis, en particulier : |
| 156 | + |
| 157 | +* Rails, Sinatra |
| 158 | +* HAML, SASS, LESS et leurs plugins Rails respectifs |
| 159 | +* RSpec |
| 160 | +* Mongoid |
| 161 | +* NodeJS et npm |
| 162 | +* Cucumber |
| 163 | +* Gollum |
| 164 | +* Bundler |
| 165 | +* rubygems et rubygems.org |
| 166 | +* Ruby itself (CRuby, l'implémentation de référence) |
| 167 | +* Symfony2 et une bonne partie des bundles les plus connus |
| 168 | +* Doctrine2 |
| 169 | +* Propel |
| 170 | +* Behat |
| 171 | +* Le plugin Eclipse pour Twig |
| 172 | +* Leiningen |
| 173 | + |
| 174 | +J'en passe et des meilleurs ! |
| 175 | + |
| 176 | +## Conclusion |
| 177 | + |
| 178 | +Nous avons vu ici ce qu'est Travis CI et comment il se positionne |
| 179 | +vis-à-vis des autres systèmes d'intégration continue. Vous avez un |
| 180 | +projet open source sur Github ? Le langage est supporté par Travis ? |
| 181 | +Alors allez vite installer son intégration continue sur Travis si ce |
| 182 | +n'est pas déjà fait ! |
| 183 | + |
| 184 | +Pour plus d'informations, n'hésitez pas à parcourir la |
| 185 | +[documentation](http://about.travis-ci.org/docs/), à suivre |
| 186 | +[@Travis](https://twitter.com/travisci) sur Twitter ou à nous rejoindre |
| 187 | +sur le channel #travis de irc.freenode.net. |
0 commit comments