Travis CI facilite le travail en équipe pour un projet logiciel avec des versions automatisées. Ces générations sont déclenchées automatiquement lorsque chaque développeur archive son code dans le référentiel. Dans cet article, nous verrons comment intégrer facilement Travis CI à notre projet hébergé sur Github. Avec l'automatisation, la notification et les tests en place, nous pouvons nous concentrer sur notre codage et notre création, tandis que Travis CI effectue le travail acharné de l'intégration continue.!
Travis CI est une plate-forme d'intégration continue hébergée, gratuite pour tous les projets open source hébergés sur Github. Avec juste un fichier appelé .travis.yml
contenant des informations sur notre projet, nous pouvons déclencher des versions automatisées à chaque modification de notre base de code dans la branche principale, dans d'autres branches ou même par une demande d'extraction.
Avant de commencer à comprendre comment intégrer Travis à notre projet, les conditions préalables suivantes seront utiles:
Au cœur de l’utilisation de Travis, se trouve le concept de Intégration continue (CI). Disons que nous travaillons sur une fonctionnalité et que, une fois le codage terminé, nous allons généralement construire projet afin de créer le fichier exécutable ainsi que d’autres fichiers nécessaires à l’exécution de l’application. Une fois la construction terminée, les bonnes pratiques incluent l'exécution de tous les tests pour s'assurer qu'ils passent tous correctement et que tout fonctionne comme prévu..
La dernière étape consiste à vérifier que tout ce que nous avons codé fonctionne effectivement, même après son intégration dans le code principal. À ce stade, nous construisons et testons à nouveau. Si la construction intégrée réussit, nous pouvons considérer que la fonctionnalité a été entièrement implémentée. Travis CI automatise cette étape exacte consistant à déclencher une construction et à tester chaque intégration dans la branche principale, d'autres branches ou même une demande d'extraction, ce qui accélère le délai de détection d'un bogue d'intégration potentiel..
Dans les sections suivantes, nous allons prendre un projet simple et déclencher une construction défaillante, le corriger, puis le transmettre. Nous verrons également comment Travis CI fonctionne facilement avec les demandes d'extraction Github..
Lorsque nous arrivons sur la page d'accueil principale, nous pouvons également voir le "dynamisme" de nombreux projets open source en cours de construction automatisée. Déconstruisons l'interface et comprenons les différentes parties:
Avant d'intégrer Travis CI, nous allons créer un projet simple "hello world" et créer quelques tâches de construction. Travis prend en charge divers langages de programmation, notamment Python, Ruby, PHP et JavaScript avec NodeJS. Pour les besoins de notre démonstration, nous utiliserons NodeJS. Créons un fichier très simple bonjour.js
tel que défini sur le site principal de NodeJS:
var http = require ('http'); http.createServer (function (req, res) res.writeHead (200, 'Content-Type': 'text / plain')); res.end ('Hello World \ n') // manquera le point virgule échec de la construction). listen (1337, '127.0.0.1'); console.log ('Serveur fonctionnant à http://127.0.0.1:1337/');
Remarquez qu'il manque un point-virgule pour que, ultérieurement, dans JSHint, un linter JavaScript puisse le détecter et générer une erreur. Nous allons construire le projet en utilisant un gestionnaire de tâches appelé GruntJS qui inclura JSHint. Ceci est bien sûr une illustration, mais dans les projets réels, nous pouvons inclure diverses tâches de test, de publication, de lintérisation et de déduction..
Pour indiquer les différents paquets requis pour GruntJS, JSHint et d’autres, nous allons créer un deuxième fichier appelé package.json
. Ce fichier contiendra d’abord le nom et le numéro de version de notre application simple. Ensuite, nous définirons les dépendances nécessaires avec devDependencies
qui inclura les paquets liés à GruntJS, y compris JSHint. Avec des scripts
, nous dirons à Travis CI de commencer à exécuter la suite de tests et la commande grunt --verbose
. Voyons le contenu complet du fichier: package.json
:
"name": "node-travis", "version": "0.1.0", "devDependencies": "grunt": "0.4.1", "grunt-cli": "0.1.9", "grunt -contrib-jshint ":" 0.6.0 "," scripts ": " test ":" grunt --verbose "
Ensuite, préparons le Gruntfile.js
cela inclura toutes les tâches requises pour exécuter notre construction. Pour des raisons de simplicité, nous ne pouvons inclure qu’une seule tâche: la charpente JavaScript avec JSHint..
module.exports = function (grunt) grunt.initConfig (jshint: all: ['Gruntfile.js', hello.js ']); grunt.loadNpmTasks ('grunt-contrib-jshint'); grunt.registerTask ('default', 'jshint'); ;
Enfin, nous allons lancer la construction qui ne contient qu’une tâche après avoir téléchargé tous les packages associés avec npm installer
:
$ npm installer $ grunt
Comme prévu, la construction ne passera pas, car JSHint détectera un point-virgule manquant. Mais si nous replaçons le point-virgule dans le bonjour.js
déposer et exécuter le grognement
commande encore une fois, nous verrons que la construction passera.
Maintenant que nous avons créé un projet simple localement, nous allons pousser ce projet sur notre compte Github et intégrer Travis CI pour déclencher automatiquement la construction..
La toute première étape de l’intégration de Travis CI consiste à créer un fichier appelé .travis.yml
qui contiendra les informations essentielles sur l’environnement et les configurations pour que la construction puisse être exécutée. Pour plus de simplicité, nous allons simplement inclure l'environnement de programmation et la version. Dans notre projet simple, c'est la version de NodeJS 0,10
. Le contenu final du fichier .travis.yml
sera comme suit:
language: node_js node_js: - "0.10"
Maintenant, notre projet comprendra les fichiers suivants ainsi que LISEZMOI.md
et .gitignore
comme demandé:
$ arbre. | - .travis.yml | - Gruntfile.js | - hello.js | - .gitignore | - README.md '- package.json
Créons maintenant un référentiel git et passons à un nouveau référentiel distant hébergé sur Github:
git init git commit -m "premier commit" git distant ajouter l'origine [email protected]: [nom d'utilisateur] / [référentiel] .git git push -u origine master
Ensuite, connectez-vous à Travis CI et autorisez Travis CI à accéder à votre compte Github. Ensuite, visitez votre page de profil pour activer le raccordement du référentiel Github afin de déclencher des versions automatisées avec Travis CI..
Comme dernière étape pour déclencher notre toute première construction, nous devrons faire pression sur Github. Supprimons le point-virgule dans le fichier bonjour.js
faire une construction qui échoue et ensuite pousser à Github. Cela déclenchera la construction automatisée dans Travis CI. Voyons l'URL: https://travis-ci.org/[nomdutilisateur//rerepo]
pour voir la première construction en cours!
git add hello.js git commit -m "suppression du point-virgule" git push
Cette construction défaillante dans l'exemple ci-dessus est vraiment une illustration simple. Mais cette situation est le reflet de ce qui pourrait arriver dans nos projets réels: nous essayons d’intégrer notre code et la construction automatisée échoue. Par défaut, une fois chaque construction terminée, Travis CI envoie des courriers électroniques à l'auteur de la validation et au propriétaire du référentiel. De cette manière, le développeur qui a envoyé le code est immédiatement alerté et peut ensuite corriger les erreurs d'intégration. Dans notre cas, insérons simplement le point-virgule manquant et poussons une nouvelle fois vers Github..
git add hello.js git commit -m "a ajouté un point-virgule pour transmettre la construction" git push
Hourra! La construction automatisée est passée cette fois. Notre code est intégré en passant tous les tests requis. Désormais, chaque fois que nous essayons d’intégrer nos modifications, qu’il s’agisse de la branche principale ou même d’autres branches, Travis CI déclenchera une construction automatisée..
Une fois que Travis CI aura été intégré à notre projet, une demande d'extraction déclenchera également une construction automatisée. Ceci est extrêmement utile pour le propriétaire du référentiel ou le développeur en charge de la fusion de la base de code. Voyons comment Travis CI indiquera si la demande d'extraction est bonne à fusionner ou non..
Tout d'abord, en utilisant un autre compte Github, ouvrons le référentiel d'origine et extrayons la demande en procédant comme suit:
Pour simuler une construction défaillante dans la demande d'extraction, nous allons à nouveau supprimer le point-virgule du fichier. bonjour.js
, commettre et pousser les modifications et enfin tirer la demande.
À chaque demande de tirage, Travis CI déclenchera automatiquement la construction. Cette fois, nous pouvons également visiter le "Requêtes de tirage" onglet pour voir l'historique des constructions actuelles ou passées déclenchées en raison d'une demande d'extraction.
Une fois que Travis CI a terminé la construction, si nous visitons la page de demande d'extraction du référentiel d'origine, nous verrons que Travis CI a ajouté certaines modifications apportées à l'interface utilisateur pour nous avertir que la construction a échoué..
Cet état de construction défaillant sera immédiatement notifié au propriétaire du référentiel ainsi qu'au développeur qui a effectué la demande d'extraction. Et maintenant, en fonction de la raison de la construction défaillante, elle peut être corrigée avec un autre commit dans la même branche. Par conséquent, ajoutons le point-virgule et retirons la demande une dernière fois. Github mettra automatiquement à jour la page de demande d'extraction.
Et enfin, lorsque nous reviendrons à la page de demande d'extraction du référentiel d'origine, nous verrons cette fois un signal "vert" lui indiquant d'aller de l'avant et de fusionner au fur et à mesure que notre construction passe.!
Le fichier .travis.yml
définit les configurations de construction. Notre exemple inclut uniquement le type de langue et la version, mais nous pouvons en ajouter d'autres plus utiles, comme suit:
langue: ruby rvm: - 1.9.3
before_script: - git config --global user.name [nom de famille]
notifications: email: false irc: "chat.freenode.net # travis"
.travis.yml
Comme vous pouvez le voir, le fichier .travis.yml
devient très important dans le déclenchement de constructions automatisées. Si ce fichier n'est pas valide, Travis CI ne déclenchera pas la construction à chaque poussée vers Github. Par conséquent, il est important de disposer d’un fichier valide que Travis CI interprétera correctement. Pour cela, nous allons installer une gemme appelée travis-lint et exécuter le fichier .travis.yml
$ gem installer travis-lint $ travis-lint .travis.yml
Il est vraiment utile d'inclure une petite image pour indiquer le statut actuel de la construction. L'image elle-même est accessible à partir du modèle d'URL http://travis-ci.org/[nomdirecteur/[repository-name].png
. Un autre moyen d’accéder rapidement aux images incorporées dans divers formats consiste à consulter la page du projet Travis CI. Par exemple, nous pouvons copier le format Markdown et l’intégrer dans le projet. LISEZMOI.md
fichier.
Un autre moyen intéressant de suivre les statuts de construction de divers projets open source lors de la navigation sur Github consiste à installer l’une des extensions du navigateur. Cela mettra les images d’état de la construction bien en évidence juste à côté de chacun des noms de projet..
Voici quelques ressources sur le concept d'intégration continue ainsi que sur l'apprentissage et l'intégration de Travis CI dans nos projets Github:
Un moyen fantastique d’apprendre quoi et comment inclure les diverses configurations de construction dans .travis.yml
fichier consiste à parcourir de nombreux référentiels open source populaires qui intègrent déjà Travis CI. Voici quelques-uns:
J'espère que cela vous a donné une brève introduction sur la manière dont nous pouvons facilement intégrer Travis CI dans nos projets Github. C'est vraiment facile à utiliser, alors essayez-le et faites de l'intégration continue un jeu d'enfant pour votre équipe!