|
| 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: true |
| 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/). |
| 15 | + |
| 16 | +<p class="center"> |
| 17 | + <img src="/public/img/2012-01-25-travis-ci/travis.png" border="0" /> |
| 18 | +</p> |
| 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 réinitialisée de la machine virtuelle restaure |
| 47 | +son état, 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.9, |
| 69 | +5.4.0RC5 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 |
| 117 | +[travis-ci.org](http://travis-ci.org), de vous authentifier |
| 118 | +automatiquement via l'OAuth de Github et vous pourrez activer |
| 119 | +l'intégration continue de vos projets, c'est aussi simple que 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 | +Son architecture étant découplée, une partie des applications qui |
| 152 | +composent Travis sont déployées sur [Heroku](http://www.heroku.com/) (le |
| 153 | +site web, le hub) alors que les workers, qui exécutent les builds, |
| 154 | +tournent sur des machines dédiées fournies généreusement par des |
| 155 | +sponsors. |
| 156 | + |
| 157 | +Pour plus de détails sur les rouages de Travis, vous pouvez vous référez |
| 158 | +à cette [technical |
| 159 | +overview](http://about.travis-ci.org/docs/dev/overview/). |
| 160 | + |
| 161 | +## A ce jour |
| 162 | + |
| 163 | +A ce jour, Travis lance les builds de plus de 4200 repositories à raison |
| 164 | +de 2000 builds par jour en moyenne ! L'intégration continue de projets |
| 165 | +très prestigieux est gérée par Travis, en particulier : |
| 166 | + |
| 167 | +* Dans la communauté Ruby : |
| 168 | + * [Ruby on Rails](http://travis-ci.org/#!/rails/rails) |
| 169 | + * [Bundler](http://travis-ci.org/#!/carlhuda/bundler) |
| 170 | + * [Sinatra](http://travis-ci.org/sinatra/sinatra) |
| 171 | + * [Rack](http://travis-ci.org/#!/rack/rack) |
| 172 | + * [RSpec](http://travis-ci.org/#!/rspec/rspec-core) |
| 173 | + * [Cucumber](http://travis-ci.org/#!/cucumber/cucumber) |
| 174 | + * [HAML](http://travis-ci.org/#!/nex3/haml) |
| 175 | + * [SASS](http://travis-ci.org/#!/nex3/sass) |
| 176 | + * [RubyGems](http://travis-ci.org/#!/rubygems/rubygems) |
| 177 | + * [rubygems.org](http://travis-ci.org/#!/rubygems/rubygems.org) |
| 178 | + * [Mongoid](http://travis-ci.org/#!/mongoid/mongoid) |
| 179 | + * [Rubinius](http://travis-ci.org/#!/rubinius/rubinius) |
| 180 | + * [Factory Girl](http://travis-ci.org/#!/thoughtbot/factory_girl) |
| 181 | + * [Spree](http://travis-ci.org/#!/spree/spree) |
| 182 | + * [Devise](http://travis-ci.org/#!/plataformatec/devise) |
| 183 | + * [amqp gem](http://travis-ci.org/#!/ruby-amqp/amqp) |
| 184 | + * et même le miroir GitHub de [CRuby (MRI) itself](http://travis-ci.org/#!/ruby/ruby) |
| 185 | +* Dans la communauté JavaScript : |
| 186 | + * [Node.js](http://travis-ci.org/joyent/node) |
| 187 | + * [NPM](http://travis-ci.org/#!/isaacs/npm) |
| 188 | + * [Express](http://travis-ci.org/#!/visionmedia/express) |
| 189 | + * [Vows](http://travis-ci.org/#!/cloudhead/vows) |
| 190 | + * [Mocha](http://travis-ci.org/#!/visionmedia/mocha) |
| 191 | + * [Ember.js](http://travis-ci.org/#!/emberjs/ember.js) (ex. SproutCore 2) |
| 192 | + * [Batman.js](http://travis-ci.org/#!/Shopify/batman) |
| 193 | + * [flatiron (certains sous-projets)](https://github.com/flatiron) |
| 194 | +* Dans la communauté PHP : |
| 195 | + * [Symfony2](http://travis-ci.org/#!/symfony/symfony) |
| 196 | + * [Doctrine2](http://travis-ci.org/#!/doctrine/doctrine2) |
| 197 | + * [Composer](http://travis-ci.org/#!/composer/composer) |
| 198 | + * [Behat](http://travis-ci.org/#!/Behat/Behat) |
| 199 | + * et de nombreux bundles Symfony2 |
| 200 | +* Dans la communauté Clojure : |
| 201 | + * [Leiningen](http://travis-ci.org/#!/technomancy/leiningen) |
| 202 | + * [Knockbox](http://travis-ci.org/#!/reiddraper/knockbox) |
| 203 | + * [Langohr](http://travis-ci.org/#!/michaelklishin/langohr) |
| 204 | + * [Monger](http://travis-ci.org/#!/michaelklishin/monger) |
| 205 | + * [Neocons](http://travis-ci.org/#!/michaelklishin/neocons) |
| 206 | + * [Sumo](http://travis-ci.org/#!/reiddraper/sumo) |
| 207 | +* Dans la communauté Erlang : |
| 208 | + * [Cowboy](http://travis-ci.org/#!/extend/cowboy) |
| 209 | + * [Elixir](http://travis-ci.org/#!/josevalim/elixir) |
| 210 | +* On y trouve même quelques plugins Eclipse qui profitent de la |
| 211 | + disponibilité de Maven sur la plateforme : |
| 212 | + * [Symfony2 Eclipse Plugin](http://travis-ci.org/#!/pulse00/Symfony-2-Eclipse-Plugin) |
| 213 | + * [Twig Eclipse Plugin](http://travis-ci.org/#!/pulse00/Twig-Eclipse-Plugin) |
| 214 | + |
| 215 | +## Conclusion |
| 216 | + |
| 217 | +Nous avons vu ici ce qu'est Travis CI et comment il se positionne |
| 218 | +vis-à-vis des autres systèmes d'intégration continue. Vous avez un |
| 219 | +projet open source sur Github ? Le langage est supporté par Travis ? |
| 220 | +Alors allez vite installer son intégration continue sur Travis si ce |
| 221 | +n'est pas déjà fait ! |
| 222 | + |
| 223 | +Pour plus d'informations, n'hésitez pas à parcourir la |
| 224 | +[documentation](http://about.travis-ci.org/docs/), à suivre |
| 225 | +[@Travis](https://twitter.com/travisci) sur Twitter ou à nous rejoindre |
| 226 | +sur le channel #travis de irc.freenode.net. |
| 227 | + |
| 228 | +Merci à [Michael Klishin](https://twitter.com/michaelklishin) pour la |
| 229 | +relecture approfondie et à tous les [contributeurs |
| 230 | +Travis](https://github.com/travis-ci/) qui participent à la mise à |
| 231 | +disposition de cet outil si pratique ! |
0 commit comments