Travis-CI Hva, hvorfor, hvordan

Travis CI gjør jobben i et team for et programvareprosjekt enklere med automatiserte bygg. Disse byggene utløses automatisk når hver utvikler sjekker i sin kode til depotet. I denne artikkelen vil vi gå gjennom hvordan vi kan integrere Travis CI enkelt med vårt prosjekt, som er vert for Github. Med automatisering, varsling og testing på plass, kan vi fokusere på kodingen og opprettelsen, mens Travis CI gjør det harde arbeidet med kontinuerlig integrasjon!


Hei Travis og CI!

Travis CI er en vert for kontinuerlig integrasjonsplattform som er gratis for alle open source-prosjekter som er vert for Github. Med bare en fil som heter .travis.yml inneholder litt informasjon om vårt prosjekt, kan vi utløse automatiserte bygger med hver endring i vår kodebase i hovedgrenen, andre grener eller til og med en trekkforespørsel.

Før vi begynner med hvordan vi kan integrere Travis med vårt prosjekt, vil følgende forutsetninger være nyttig:

  1. Git
  2. GitHub
  3. Grunnleggende NodeJS
  4. NPM
  5. GruntJS

I hjertet av å bruke Travis er begrepet kontinuerlig integrering (CI). La oss si at vi jobber med en funksjon, og etter at vi er ferdige med koding, vil vi typisk bygge prosjektet for å opprette kjørbare og andre filer som er nødvendige for å kjøre programmet. Etter at bygningen er fullført, inkluderer god praksis alle testene for å sikre at de alle går forbi og alt fungerer som forventet.

Det siste trinnet er å sikre at det vi kodet faktisk fungerer, selv etter at vi har integrert det i hovedlinjekoden. På dette punktet bygger og testes vi igjen. Hvis den integrerte bygningen lykkes, kan vi vurdere at funksjonen er fullt implementert. Travis CI automatiserer dette nøyaktige trinnet ved å utløse en konstruksjon og test på hver integrering til hovedgrenen, andre grener eller til og med en trekkforespørsel, og akselererer tiden for å gjenkjenne en potensiell integrasjonsfeil.

I de følgende avsnittene tar vi et enkelt prosjekt og utløser en feilbygging, retter den og sender den deretter. Vi vil også se hvordan Travis CI enkelt fungerer med Github-trekkforespørsler.


Travis Interface

Når vi lander på hovedsiden, kan vi også se "busyness" av mange åpne kildeprosjekter som går gjennom automatisert bygg. La oss dekonstruere grensesnittet og forstå de ulike delene:


  1. sidebar: Dette viser listen over offentlige open source-prosjekter på Github som nå går gjennom automatiserte bygg. Hvert element har det hyperkoblede prosjektnavnet, varigheten til bygningen så langt og det sekvensielle antall bygg.
  2. Bygg i gang [gul]: En liten gul farget sirkel ved siden av prosjektnavnet indikerer at bygningen er i gang.
  3. Byggingen mislyktes [rødt]: En liten rødfargede sirkel ved siden av prosjektnavnet indikerer at bygningen er fullført og den har mislyktes.
  4. Bygget gikk forbi [grønn]: En liten grønn sirkel ved siden av prosjektnavnet indikerer at bygningen er fullført og den har gått.
  5. Prosjektnavn og linker: Tittelen er i formatet brukernavn / repository og den er knyttet til Travis CI-byggesiden. Det lille Octocat-symbolet ved siden av det kobler til Github-siden i depotet som inneholder kildekoden.
  6. Typer av bygg: De automatiserte byggene kan utløses ved å forplikte koden til hovedgrenen, andre grener eller til og med en trekkforespørsel. Ved å gå til den enkelte fanen, kan vi få mer informasjon om byggene.
  7. Bygg aktivitet: Denne delen inneholder informasjon om hver av oppgavene som byggingen kjører.

Trinn 1: Hello World!

Før vi integrerer Travis CI, vil vi lage et enkelt "hello world" -prosjekt og lage noen byggeoppgaver. Travis støtter forskjellige programmeringsspråk, inkludert Python, Ruby, PHP og JavaScript med NodeJS. For formålet med vår demo, bruker vi NodeJS. La oss lage en veldig enkel fil hello.js som definert på NodeJS hovedwebside:

 var http = krever ('http'); http.createServer (funksjon (req, res) res.writeHead (200, 'Content-Type': 'text / plain'); res.end ('Hello World \ n') // mangler semikolon vil mislykkes bygge). lytt (1337, '127.0.0.1'); console.log ('Server kjører på http://127.0.0.1:1337/');

Legg merke til at det mangler et halvt kolon, slik at det senere på JSHint vil en JavaScript-linter kunne oppdage dette og øke en feil. Vi skal bygge prosjektet ved hjelp av en oppgaveløper som heter GruntJS som inkluderer JSHint. Dette er selvfølgelig en illustrasjon, men i virkelige prosjekter kan vi fortsette å inkludere ulike tester, publisering, linting og hinting oppgaver.

For å indikere de ulike pakkene som kreves for GruntJS, JSHint og andre, vil vi opprette en andre fil som heter package.json. Denne filen inneholder for det første navnet og versionsnummeret til vårt enkle program. Deretter skal vi definere avhengighetene som trengs for devDependencies som vil inkludere GruntJS-relaterte pakker, inkludert JSHint. Med skript, Vi vil fortelle Travis CI å begynne å kjøre testpakken og kommandoen grunt - verbose. La oss se hele innholdet i filen: package.json:

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

Neste, la oss forberede Gruntfile.js som vil inkludere alle oppgaver som kreves for å drive vår bygg. For enkelhet kan vi inkludere bare én oppgave - JavaScript linting med JSHint.

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

Til slutt vil vi kjøre byggingen som inneholder bare en oppgave etter at vi laster ned alle relaterte pakker med npm installasjon:

 $ npm installere $ grunt

Som forventet vil bygningen ikke passere fordi JSHint vil oppdage et manglende semikolon. Men hvis vi plasserer halvkolonen tilbake i hello.js fil og kjør grynte kommandoen igjen, vi vil se at bygningen vil passere.


Nå som vi har opprettet et enkelt prosjekt lokalt, vil vi presse dette prosjektet til vår Github-konto og integrere Travis CI for å utløse byggingen automatisk.


Trinn 2: Hei verden med Travis CI

Det aller første skrittet i å integrere Travis CI er å lage en fil som heter .travis.yml som vil inneholde den viktige informasjonen om miljøet og konfigurasjonene for byggingen skal løpe. For enkelhet, vil vi bare inkludere programmeringsmiljøet og versjonen. I vårt enkle prosjekt er det NodeJS versjon 0,10. Det endelige innholdet i filen .travis.yml vil være som følger:

 språk: node_js node_js: - "0.10"

Nå vil prosjektet bestå av følgende filer sammen med README.md og .gitignore som kreves:

 $ treet. | - .travis.yml | - Gruntfile.js | - hello.js | - .gitignore | - README.md '- package.json

La oss nå lage et git-repository og presse til et nytt fjernlager som er vert på Github:

 git init git commit -m "first commit" git ekstern legg til opphav [email protected]: [brukernavn] / [repository] .git git push -u opprinnelses master

Deretter logger du inn på Travis CI og autoriserer Travis CI for å få tilgang til Github-kontoen din. Etterpå kan du besøke profilsiden din for å slå på kroken for Github-depotet for å utløse automatiserte bygg med Travis CI.


Som et siste skritt for å utløse vår aller første bygg, må vi presse til Github. La oss fjerne halvtykkelsen i filen hello.js å lage en sviktende bygging og deretter presse til Github. Dette vil utløse den automatiserte bygningen i Travis CI. La oss besøke nettadressen: https://travis-ci.org/[username]/[repo] for å se den første bygningen pågår!

 git legg til hello.js git commit -m "fjernet semi-colon" git push

Denne sviktende bygningen i eksemplet ovenfor er egentlig en enkel illustrasjon. Men denne situasjonen er reflekterende av noe som kan skje i våre virkelige prosjekter - vi prøver å integrere vår kode og den automatiserte bygningen feiler. Som standard, etter at hver bygning er fullført, vil Travis CI sende e-post til forfatterforfatteren og repositoryieren. På denne måten er utvikleren som presset koden umiddelbart varslet og kan deretter fikse integrasjonsfeilene. I vårt tilfelle, la oss bare sette inn det manglende semikolonet og trykk til Github en gang til.

 git legg til hello.js git commit -m "lagt semi-kolon å passere bygge" git push

Hurra! Den automatiserte bygningen har gått denne gangen. Vår kode er integrert og bestått alle nødvendige tester. Nå, hver gang vi prøver å integrere våre endringer, enten det er for master-avdelingen eller andre grener, vil Travis CI utløse en automatisert bygge.


Trekkforespørsler

Når vi har integrert Travis CI i vårt prosjekt, vil en trekkforespørsel også utløse en automatisert bygge. Dette er utrolig nyttig for verneieren eller utvikleren som har ansvaret for sammenslåing av koden. La oss se hvordan Travis CI vil gi råd om om trekkforespørselen er god til å slå sammen eller ikke.

Først, bruk en annen Github-konto, la oss gaffel opprinnelig lager og dra forespørsel med følgende trinn:

  1. Fork det opprinnelige lageret
  2. Opprett en ny filial i forked-depotet
  3. Gjør de nye endringene og forplikte det
  4. Kontroller at funksjonen grenen er valgt
  5. Sammenlign og trekk forespørsel

Slå sammen med forsiktighet

For å simulere en feilbygging i trekkforespørselen, vil vi igjen fjerne halvtykkelsen i filen hello.js, forplikte og presse endringene og endelig trekke forespørselen.


Ved hver trekkforespørsel vil Travis CI automatisk utløse bygningen. Denne gangen kan vi også besøke "Pull Requests" fanen for å se historien om nåværende eller tidligere bygg utløst på grunn av en trekkforespørsel.


Etter at Travis CI har fullført byggingen, vil vi se at Travis CI har lagt til noen brukergrensesnittendringer for å varsle oss om at byggingen har feilet.


Godt å slå sammen

Denne mislykkede byggestatus vil umiddelbart bli varslet til verneierens eier, samt utvikleren som gjorde trekkforespørselen. Og nå, avhengig av årsaken til den sviktende bygningen, kan den korrigeres med et annet forbud i samme gren. Derfor legger vi til halvkolon og trekker forespørsel en siste gang. Github oppdaterer også automatisk forespørselssiden.


Og til slutt, når vi kommer tilbake til det originale arkivets forespørselsside, vil denne gangen vi se et "grønt" signal for å fortsette og slå sammen ettersom bygningen er bestått!



Bygg konfigurasjoner

Filen .travis.yml definerer byggekonfigurasjonene. Vårt eksempel er bare språk og versjon, men vi kan legge til flere nyttige som følger:

  1. Språkspesifikke. Dette er et eksempel på Ruby
     språk: ruby ​​rvm: - 1.9.3
  2. Kommandoer eller skript for å kjøre før eller etter hver bygge. Dette er et eksempel på en kommando før du kjører et skript:
     before_script: - git config --global user.name [myname]
  3. Meldinger i form av e-post eller chatvarsler sendes som deklarert av byggekonfigurasjonene. Dette er et eksempel på å slå av e-post og sende det til IRC:
     varslinger: email: false irc: "chat.freenode.net # travis"

validere .travis.yml

Som du kan se, filen .travis.yml blir svært viktig i utløser automatiserte bygg. Hvis denne filen ikke er gyldig, vil ikke Travis CI utløse byggingen av hvert trykk til Github. Derfor sikrer vi at vi har en gyldig fil som Travis CI vil tolke riktig, er viktig. For dette vil vi installere en perle kalt travis-lint og kjøre filen .travis.yml

 $ perle installere travis-lint $ travis-lint .travis.yml


Bygg statusbilder

Det er veldig nyttig å ta med et lite bilde for å indikere den nåværende statusen til bygningen. Selve bildet kan nås fra URL-mønsteret http://travis-ci.org/[username]/[repository-name].png. En annen måte å raskt få tilgang til bildene som er innebygd i forskjellige formater, er på Travis CI-prosjektsiden selv. For eksempel kan vi kopiere Markdown-formatet og legge inn prosjektet README.md fil.


En annen kul måte å spore bygge statusene til ulike open source-prosjekter mens du surfer rundt Github, er å installere en av nettleserutvidelsene. Dette vil sette byggestatusbildene fremtredende ved siden av hvert av prosjektnavnene.


Ressurser på Travis CI

Her er noen ressurser på begrepet kontinuerlig integrering, samt å lære og integrere Travis CI i våre Github-prosjekter:

En fantastisk måte å lære hva og hvordan å inkludere de ulike byggekonfigurasjonene i .travis.yml filen er faktisk å bla gjennom mange av de populære open source-lagrene som allerede integrerer Travis CI. Her er noen:

  1. Ruby on Rails (Ruby)
  2. BackboneJS (JavaScript)
  3. Komponist (PHP)
  4. Kolbe (Python)

Jeg håper dette ga deg en kort introduksjon til hvordan vi lett kan integrere Travis CI i våre Github-prosjekter. Det er veldig enkelt å bruke, så prøv det og gjør kontinuerlig integrasjon en bris for teamet ditt!