Travis-CI Vad, varför, hur

Travis CI gör jobbet i ett team för ett mjukvaruprojekt enklare med automatiserade byggnader. Dessa byggnader utlöses automatiskt när varje utvecklare kontrollerar sin kod till förvaret. I denna artikel kommer vi att gå igenom hur vi enkelt kan integrera Travis CI med vårt projekt, som är värd för Github. Med automatisering, anmälan och testning på plats kan vi fokusera på vår kodning och skapa, medan Travis CI gör det hårda arbetet med kontinuerlig integration!


Hej Travis & CI!

Travis CI är en värdgående kontinuerlig integrationsplattform som är fri för alla öppna källprojekt som finns på Github. Med bara en fil som heter .travis.yml innehållande viss information om vårt projekt kan vi utlösa automatiserade byggnader med varje ändring i vår kodbas i huvudgrenen, andra grenar eller till och med en dragförfrågan.

Innan vi börjar med hur vi kan integrera Travis med vårt projekt, kommer följande förutsättningar att vara till hjälp:

  1. Git
  2. github
  3. Basic NodeJS
  4. NPM
  5. GruntJS

I hjärtat av att använda Travis är begreppet kontinuerlig integration (Cl). Låt oss säga att vi arbetar med en funktion och när vi är färdiga kodar, kommer vi vanligtvis bygga projektet för att skapa körbar samt andra filer som är nödvändiga för att köra applikationen. Efter att byggnaden är klar, omfattar bra metoder alla testen för att säkerställa att de passerar alla och allt fungerar som förväntat.

Det sista steget är att se till att det som vi kodade verkligen fungerar trots att vi integrerat det i huvudkoden. Vid denna tidpunkt bygger vi och testar igen. Om den integrerade byggnaden lyckas kan vi anse att funktionen har genomförts fullt ut. Travis CI automatiserar det här exakta steget för att utlösa en byggnad och test vid varje integration till huvudgrenen, andra grenar eller till och med en dragförfrågan, vilket accelererar tiden för detektering av en potentiell integrationsbugg.

I följande avsnitt kommer vi att ta ett enkelt projekt och utlösa en felaktig byggnad, korrigera den och sedan skicka den. Vi kommer också att se hur Travis CI enkelt fungerar med Github-dragförfrågningar.


Travis Interface

När vi landar på huvudsidan kan vi också se "busyness" av många öppna källprojekt genom automatiserad byggnad. Låt oss avkonstruera gränssnittet och förstå de olika delarna:


  1. Sidebar: Detta visar listan över offentliga open source-projekt på Github som för närvarande går igenom automatiserade byggnader. Varje objekt har det länkade projektnamnet, varaktigheten för byggnaden hittills och det sekventiella numret på byggnaden.
  2. Bygga pågår [gul]: En liten gul färgad cirkel bredvid projektnamnet indikerar att byggnaden är igång.
  3. Byggnaden misslyckades [röd]: En liten rödfärgad cirkel bredvid projektnamnet indikerar att byggnaden är klar och den har misslyckats.
  4. Bygget gick [grön]: En liten grönfärgad cirkel bredvid projektnamnet indikerar att byggnaden är klar och den har gått.
  5. Projektnamn och länkar: Titeln är i formatet användarnamn / förvaret och det är länkat till Travis CI-bygg sidan. Den lilla Octocat-symbolen bredvid den länkar till Github-sidan i förvaret som innehåller källkoden.
  6. Typer av byggnad: De automatiska byggnaderna kan utlösas genom att ange koden till huvudgrenen, andra grenar eller till och med en dragförfrågan. Genom att besöka den enskilda fliken kan vi få mer information om byggnaderna.
  7. Bygg aktivitet: Det här avsnittet innehåller information om var och en av de uppgifter som byggnaden körs.

Steg 1: Hej världen!

Innan vi integrerar Travis CI skapar vi ett enkelt "hallo värld" -projekt och skapar några byggnadsuppgifter. Travis stöder olika programmeringsspråk, inklusive Python, Ruby, PHP och JavaScript med NodeJS. För vår demonstration ska vi använda NodeJS. Låt oss skapa en mycket enkel fil hello.js enligt definitionen på NodeJS huvudwebbplats:

 var http = kräver ('http'); http.createServer (funktion (req, res) res.writeHead (200, 'Content-Type': 'text / plain'); res.end ('Hello World \ n') misslyckas byggnaden). lyssna (1337, '127.0.0.1'); console.log ("Server som körs på http://127.0.0.1:1337/ ');

Lägg märke till att det saknas en halvkolon så att det senare kan JSHint, en JavaScript-linter, kunna upptäcka detta och göra ett fel. Vi kommer att bygga projektet genom att använda en uppdragslöpare som heter GruntJS som kommer att inkludera JSHint. Det här är givetvis en illustration, men i verkliga projekt kan vi fortsätta att inkludera olika test, publicering, linting och antydande uppgifter.

För att ange de olika paket som krävs för GruntJS, JSHint och andra, kommer vi att skapa en andra fil som heter package.json. Den här filen innehåller för det första namnet och versionsnumret för vår enkla applikation. Därefter kommer vi att definiera de beroenden som behövs med devDependencies vilket kommer att omfatta GruntJS-relaterade paket inklusive JSHint. Med skript, vi kommer att berätta för Travis CI att börja köra testpaketet och kommandot grunt --verbose. Låt oss se hela innehållet i filen: package.json:

 "namn": "node-travis", "version": "0.1.0", "devDependencies": "grunt": "0.4.1", "grunt-cli": "0.1.9", "grunt -contrib-jshint ":" 0.6.0 "," skript ": " test ":" grunt --verbose "

Låt oss sedan förbereda Gruntfile.js som kommer att innehålla alla uppgifter som krävs för att driva vår byggnad. För enkelhet kan vi inkludera bara en uppgift - JavaScript linting med JSHint.

 module.exports = funktion (grunt) grunt.initConfig (jshint: all: ['Gruntfile.js', 'hello.js']); grunt.loadNpmTasks ( 'grunt-contrib-jshint'); grunt.registerTask ('default', 'jshint'); ;

Slutligen kör vi byggnaden som innehåller endast en uppgift efter att vi hämtat alla relaterade paket med npm installera:

 $ npm installera $ grunt

Som förväntat kommer byggnaden inte att passera eftersom JSHint kommer att upptäcka en saknad halvkolon. Men om vi lägger halvkolonnen tillbaka in i hello.js fil och kör grymta kommando igen, vi kommer se att byggnaden kommer att passera.


Nu när vi har skapat ett enkelt projekt lokalt kommer vi att driva projektet till vårt Github-konto och integrera Travis CI för att utlösa byggandet automatiskt.


Steg 2: Hej världen med Travis CI

Det allra första steget i att integrera Travis CI är att skapa en fil som heter .travis.yml som kommer att innehålla väsentlig information om miljön och konfigurationer för byggnaden att köra. För enkelhet kommer vi bara att inkludera programmeringsmiljön och versionen. I vårt enkla projekt är det NodeJS-versionen 0,10. Det slutliga innehållet i filen .travis.yml kommer att vara enligt följande:

 språk: node_js node_js: - "0.10"

Nu kommer vårt projekt att bestå av följande filer tillsammans med README.md och .gitignore såsom krävs:

 $ träd. | - .travis.yml | - Gruntfile.js | - hello.js | - .gitignore | - README.md '- package.json

Låt oss nu skapa ett git-repository och trycka på ett nytt fjärrförråd som finns på Github:

 git init git commit -m "first commit" git fjärr lägg till ursprung [email protected]: [användarnamn] / [repository] .git git push -u ursprung master

Därefter loggar du in på Travis CI och godkänner Travis CI för att få tillgång till ditt Github-konto. Därefter besöker du din profilsida för att slå på kroken för Github-arkivet för att utlösa automatiserad byggnad med Travis CI.


Som ett sista steg för att utlösa vår allra första byggnad, måste vi trycka på Github. Låt oss ta bort halvkolonnen i filen hello.js att göra en misslyckande byggnad och tryck sedan till Github. Detta kommer att utlösa den automatiska byggnaden i Travis CI. Låt oss besöka webbadressen: https://travis-ci.org/[username]/[repo] för att se den första byggnaden pågår!

 git lägg till hello.js git commit -m "borttagen semi-colon" git push

Denna felaktiga byggnad i ovanstående exempel är verkligen en enkel illustration. Men denna situation återspeglar någonting som kan hända i våra verkliga projekt - vi försöker integrera vår kod och den automatiska byggnaden misslyckas. Som standard kommer Travis CI att skicka e-post till författaren och förvaringsinnehavaren efter varje byggnad är klar. På så sätt kan utvecklaren som tryckte koden omedelbart varnas och kan sedan fixa integrationsfelen. I vårt fall, låt oss bara sätta in den saknade halvkolon och tryck till Github en gång till.

 git lägg till hello.js git commit -m "lagt semi-colon för att passera build" git push

hurra! Den automatiska byggnaden har gått denna gång. Vår kod är integrerad och passerar alla nödvändiga test. Nu varje gång vi försöker integrera våra förändringar, oavsett om det är till huvudkontoret eller till och med andra grenar, kommer Travis CI att utlösa en automatiserad byggnad.


Pull-förfrågningar

När vi väl har integrerat Travis CI i vårt projekt kommer en pull-förfrågan också att utlösa en automatisk byggnad. Detta är oerhört användbart för förvaringsinnehavaren eller utvecklaren som ansvarar för sammanslagning av kodbasen. Låt oss se hur Travis CI kommer att ge råd om huruvida dragförfrågan är bra att slå samman eller inte.

Först använder vi ett annat Github-konto, låt oss gaffla originalförrådet och dra begäran med följande steg:

  1. Gaffla originalförvaret
  2. Skapa en ny filial i forked repository
  3. Gör de nya ändringarna och begå den
  4. Kontrollera att funktionsgrenen är vald
  5. Jämför och dra förfrågan

Sammanslagning med försiktighet

För att simulera en felaktig byggnad i dragförfrågan kommer vi återigen att ta bort halvkolonnen i filen hello.js, begå och tryck på ändringarna och slutligen dra begäran.


Vid varje dragförfrågan kommer Travis CI automatiskt att utlösa byggnaden. Den här gången kan vi också besöka "Pull Requests" fliken för att se historien om aktuella eller tidigare byggnader utlösas på grund av en dragförfrågan.


När Travis CI har slutfört byggnaden, kommer vi att se om Travis CI har lagt till några ändringar av användargränssnittet för att varna att byggnaden har misslyckats.


Bra att slå samman

Denna felaktiga byggstatus kommer omedelbart att anmälas till förvaringsinnehavaren såväl som den utvecklare som gjorde dragförfrågan. Och nu, beroende på orsaken till den felaktiga byggnaden, kan den åtgärdas med ett annat engagemang i samma gren. Därför lägger vi till halvkolon och drar förfrågan en sista gång. Github uppdaterar också automatiskt begäran om draförfrågan.


Och äntligen, när vi kommer tillbaka till originalförrådets begäran om förfrågningsfrågan, kommer vi denna gång att se en "grön" signal för att gå vidare och göra en sammanslagning då vår byggnad passerar!



Bygg konfigurationer

Filen .travis.yml definierar byggkonfigurationerna. Vårt exempel ingår bara språktyp och version, men vi kan lägga till mer användbara som följer:

  1. Språkspecifik. Detta är ett exempel för Ruby
     språk: ruby ​​rvm: - 1.9.3
  2. Kommandon eller skript som ska köras före eller efter varje byggnad. Detta är ett exempel på ett kommando innan du kör ett skript:
     before_script: - git config - global användarnamn [myname]
  3. Meddelanden när det gäller e-postmeddelanden eller chattvarningar skickas som deklareras av byggkonfigurationerna. Det här är ett exempel på att stänga av e-postmeddelanden och skicka den till IRC:
     meddelanden: email: false irc: "chat.freenode.net # travis"

validera .travis.yml

Som du kan se, filen .travis.yml blir mycket viktigt för att utlösa automatiserade byggnader. Om den här filen inte är giltig kommer Travis CI inte att utlösa byggnaden på varje tryck till Github. Därför är det viktigt att se till att vi har en giltig fil som Travis CI tolkar korrekt. För detta installerar vi en pärla som heter travis-lint och kör filen .travis.yml

 $ gem installera travis-lint $ travis-lint .travis.yml


Bygg statusbilder

Det är väldigt bra att ta med en liten bild för att indikera byggnadens nuvarande status. Bilden själv kan nås från URL-mönstret http://travis-ci.org/[username]/[repository-name].png. Ett annat sätt att snabbt komma åt bilderna inbäddade i olika format finns på Travis CI-projektsidan själv. Till exempel kan vi kopiera Markdown-formatet och bädda in i projektets README.md fil.


Ett annat coolt sätt att spåra byggstatuserna för olika öppna källprojekt medan du surfar runt Github är att installera en av webbläsartilläggen. Detta kommer att ställa byggnadsstatusbilderna framträdande bredvid varje av projektnamnen.


Resurser på Travis CI

Här finns några resurser om begreppet kontinuerlig integrering samt att lära och integrera Travis CI i våra Github-projekt:

Ett fantastiskt sätt att lära sig vad och hur man ska inkludera de olika byggkonfigurationerna i .travis.yml filen är att faktiskt bläddra igenom många av de populära open source-arkiverna som redan integrerar Travis CI. Här är några:

  1. Ruby on Rails (Ruby)
  2. BackboneJS (JavaScript)
  3. Kompositör (php)
  4. Flaska (Python)

Jag hoppas det gav dig en kort introduktion till hur vi enkelt kan integrera Travis CI i våra Github-projekt. Det är väldigt enkelt att använda, så prova och gör kontinuerlig integration en bris för ditt lag!