Travis-CI Ce, de ce, cum

Travis CI face mai ușoară lucrul într-o echipă pentru un proiect software cu ajutorul sistemelor automate. Aceste construiri sunt declanșate automat atunci când fiecare dezvoltator verifică în codul lor în depozit. În acest articol, vom trece prin modul în care putem integra Travis CI cu ușurință cu proiectul nostru, găzduit de Github. Cu ajutorul automatizării, notificării și testării, ne putem concentra pe codificarea și crearea, în timp ce Travis CI face munca grea de integrare continuă!


Bună ziua Travis & CI!

Travis CI este o platformă de integrare continuă găzduită, care este gratuită pentru toate proiectele open source găzduite pe Github. Cu doar un fișier numit .travis.yml conținând unele informații despre proiectul nostru, putem declanșa construcții automate cu fiecare schimbare a bazei noastre de cod în ramura principală, alte ramuri sau chiar o solicitare de tragere.

Înainte de a începe cu modul în care putem integra Travis cu proiectul nostru, următoarele premise vor fi de ajutor:

  1. git
  2. github
  3. Nodul de bază
  4. NPM
  5. GruntJS

În inima folosirii lui Travis, este conceptul de integrare continuă (CI). Să presupunem că lucrăm la o singură caracteristică și după ce am terminat de codat, în mod obișnuit construi proiectul pentru a crea fișierul executabil, precum și alte fișiere necesare pentru a rula aplicația. După finalizarea construcției, bunele practici includ executarea tuturor testelor, pentru a se asigura că toate trec și totul funcționează conform așteptărilor.

Ultimul pas este să ne asigurăm că ceea ce codificăm funcționează chiar și după ce îl integrăm în codul principal. În acest moment construim și testăm din nou. Dacă reușim construirea integrată, putem considera că această caracteristică a fost implementată pe deplin. Travis CI automatizează acest pas exact de a declanșa o construcție și de a testa fiecare integrare în ramura master, alte ramuri sau chiar o solicitare de tragere, accelerând timpul pentru a detecta un potențial bug de integrare.

În secțiunile următoare, vom lua un proiect simplu și vom declanșa o construcție nereușită, vom corecta și apoi vom trece. De asemenea, vom vedea cum Travis CI funcționează cu ușurință cu cererile de tragere Github.


Interfața Travis

Când aterizăm pe pagina de pornire principală, putem vedea și "ocupația" multor proiecte open source care trec prin construirea automată. Să deconstruăm interfața și să înțelegem diferitele părți:


  1. Bara laterală: Aceasta arată lista proiectelor publice open source de pe Github care trec în prezent prin construiri automate. Fiecare element are numele de proiect hyperlinked, durata construirii până acum și numărul secvențial de construire.
  2. Construiți în progres [galben]: Un cerc de culoare galbenă lângă numele proiectului indică faptul că construcția este în desfășurare.
  3. Construcția a eșuat [roșu]: Un cerc de culoare roșie puțin lângă numele proiectului indică faptul că construirea este completă și că nu a reușit.
  4. Construcția a trecut [verde]: Un cerc puțin verde lângă numele proiectului indică faptul că construirea este completă și că a trecut.
  5. Numele proiectului și legături: Titlul este în format Nume de utilizator / depozit și este legată de pagina de creație Travis CI. Micul simbol Octocat de lângă acesta se leagă de pagina Github a depozitului care conține codul sursă.
  6. Tipuri de construcție: Construcțiile automate pot fi declanșate prin comiterea codului în filiala principală, alte ramuri sau chiar într-o solicitare de tragere. Vizitând fila individuală, putem obține mai multe informații despre construcții.
  7. Activitatea de construire: Această secțiune va conține informații despre fiecare dintre sarcinile executate de constructor.

Pasul 1: Buna ziua!

Înainte de a integra Travis CI, vom crea un simplu proiect "hello world" și vom crea niște sarcini de construcție. Travis suportă diverse limbi de programare, inclusiv Python, Ruby, PHP și JavaScript, cu NodeJS. În scopul demonstrației noastre, vom folosi NodeJS. Să creăm un fișier foarte simplu hello.js așa cum este definit pe site-ul principal al NodeJS:

 var http = necesită ("http"); http.createServer (funcția (req, res) res.writeHead (200, 'Content-Type': 'text / plain');) res.end ('Hello World \ n') eșua construirea). ascultați (1337, '127.0.0.1'); console.log ("Serverul rulează la http://127.0.0.1:1337/");

Observă că există o semi-colon lipsă, astfel încât mai târziu JSHint, un linter JavaScript va fi capabil să detecteze acest lucru și să ridice o eroare. Vom construi proiectul folosind un alergator numit GruntJS care va include JSHint. Aceasta este, bineînțeles, o ilustrare, dar în proiecte reale, putem continua să includem diverse activități de testare, publicare, lăcuire și sugerare.

Pentru a indica diferitele pachete necesare pentru GruntJS, JSHint și altele, vom crea un al doilea fișier numit package.json. Acest fișier va conține mai întâi numele și numărul versiunii aplicației noastre simple. Apoi, vom defini dependențele necesare cu devDependencies care va include pachete legate de GruntJS, inclusiv JSHint. Cu script-uri, îi vom spune lui Travis CI să înceapă să ruleze suita de testare și comanda grunt - verbose. Să vedem conținutul complet al fișierului: package.json:

 "nume": "node-travis", "versiune": "0.1.0", "devDependencies": "grunt": "0.1.9" -contrib-jshint ":" 0.6.0 "," scripturi ": " test ":" grunt --verbose "

Apoi, să pregătim Gruntfile.js care va include toate sarcinile necesare pentru a rula construirea noastră. Pentru simplificare, putem include o singură sarcină - scrierea JavaScript cu JSHint.

 modul.exports = funcție (grunt) grunt.initConfig (jshint: toate: ['Gruntfile.js', 'hello.js']); grunt.loadNpmTasks ( 'groh-contrib-jshint'); grunt.registerTask ("implicit", "jshint"); ;

În cele din urmă, vom rula construirea care conține o singură sarcină după ce descărcăm toate pachetele asociate cu npm install:

 $ npm instalează $ grunt

Așa cum era de așteptat, construcția nu va trece, deoarece JSHint va detecta un semi-colon lipsă. Dar dacă așezăm semicolonul înapoi în hello.js fișier și rulați mormăit vom revedea din nou, vom vedea că construcția va trece.


Acum, că am creat un proiect simplu la nivel local, vom împinge acest proiect în contul nostru Github și vom integra Travis CI pentru a declanșa construirea automată.


Pasul 2: Bună ziua cu Travis CI

Primul pas în integrarea Travis CI este crearea unui fișier numit .travis.yml care va conține informațiile esențiale despre mediul înconjurător și despre configurațiile construirii. Pentru simplitate, vom include doar mediul de programare și versiunea. În proiectul nostru simplu, este versiunea NodeJS 0.10. Conținutul final al fișierului .travis.yml va fi după cum urmează:

 limbă: node_js node_js: - "0.10"

Acum, proiectul nostru va consta din următoarele fișiere împreună cu README.md și .gitignore după cum este necesar:

 $ copac. | --Travis.yml | - Gruntfile.js | - hello.js | - .gitignore | - README.md '- pachetul.json

Să creați acum un depozit git și să împingeți la un nou depozit la distanță găzduit pe Github:

 git init git comită -m "first commit" git adăugați la distanță [email protected]: [username] / [repository] .git git push -u master de origine

Apoi, conectați-vă la Travis CI și autorizați-l pe Travis CI să vă acceseze contul Github. Ulterior, vizitați pagina de profil pentru a activa cârligul pentru depozitul Github pentru a declanșa construcții automate cu Travis CI.


Ca ultim pas pentru a declanșa prima noastră construcție, va trebui să împingem la Github. Să eliminăm semicolonul din fișier hello.js pentru a face o construcție eșec și apoi împingeți la Github. Aceasta va declanșa construirea automată în Travis CI. Să vizitați URL-ul: https://travis-ci.org/[username]/[repo] pentru a vedea prima construcție în desfășurare!

 git adăugați hello.js git commit -m "eliminat semi-colon" git push

Această construcție nereușită din exemplul de mai sus este într-adevăr o ilustrare simplă. Dar această situație reflectă ceva ce s-ar putea întâmpla în proiectele noastre reale - încercăm să integrăm codul nostru și construirea automată eșuează. În mod implicit, după terminarea fiecărei construcții, Travis CI va trimite e-mailuri autorului comitetului și proprietarului repozitoriei. În acest fel, dezvoltatorul care a împins codul este imediat alertat și apoi poate remedia erorile de integrare. În cazul nostru, să inserăm semicolonul lipsă și să îl împingem încă o dată lui Github.

 git adăugați hello.js git commit -m "a adăugat semi-colon pentru a trece construi" push git

Ura! Construcția automată a trecut de data aceasta. Codul nostru este integrat trecând toate testele necesare. Acum, de fiecare dată când încercăm să integrăm modificările noastre fie că este vorba despre sucursala sau chiar alte ramuri, Travis CI va declanșa o construcție automată.


Trage Cereri

Odată ce am integrat Travis CI în proiectul nostru, o cerere de tragere va declanșa o construcție automată. Acest lucru este foarte util pentru proprietarul depozitului sau pentru dezvoltatorul care se ocupă de fuzionarea bazei de cod. Să vedem cum Travis CI va sfătui dacă cererea de tragere este bună pentru a fuziona sau nu.

Mai întâi, folosind un alt cont Github, hărțuiți depozitul original și trageți cererea cu următorii pași:

  1. Depozitați magazia originală
  2. Creați o nouă filială în depozitul cu furcă
  3. Efectuați noile modificări și comiteți-le
  4. Asigurați-vă că este selectată ramura de caracteristici
  5. Comparați și trageți cererea

Mergeți cu atenție

Pentru a simula o construcție nereușită în solicitarea de tragere, vom elimina din nou semicolonul din fișier hello.js, să comită și să împingă modificările și să tragă în final cererea.


La fiecare solicitare de tragere, Travis CI va declanșa automat construirea. De data aceasta, putem vizita, de asemenea "Cereri trageți" pentru a vedea istoricul construcțiilor curente sau trecute declanșate din cauza unei solicitări de tragere.


După ce Travis CI finalizează construirea, dacă vom vizita pagina de solicitare de tragere din depozitul original, vom vedea că Travis CI a adăugat câteva modificări de interfață cu utilizatorul pentru a ne avertiza că construirea a eșuat.


Bun pentru Merge

Această stare de construcție nereușită va fi imediat notificată proprietarului repozitorului, precum și dezvoltatorului care a făcut cererea de tragere. Și acum, în funcție de motivul construirii necorespunzătoare, poate fi rectificat cu o altă comitet în aceeași ramură. Prin urmare, să adăugăm semicolonul și să solicităm ultima dată. Github va actualiza automat și pagina de solicitare de tragere.


Și în final, când ne întoarcem la pagina de solicitare a tragerii originale a depozitului, de data aceasta vom vedea un semnal "verde" pentru a merge și a face o fuzionare pe măsură ce construirea noastră trece!



Construiți configurații

Fișierul .travis.yml definește configurațiile de configurare. Exemplul nostru a inclus doar tipul de limbă și versiunea, dar putem adăuga mai multe dintre cele mai utile, după cum urmează:

  1. Limba specifică. Acesta este un exemplu pentru Ruby
     limba: ruby ​​rvm: - 1.9.3
  2. Comenzi sau scripturi pentru a rula înainte sau după fiecare construire. Acesta este un exemplu de comandă înainte de a rula un script:
     before_script: - git config - nume utilizator global [nume]
  3. Notificările în ceea ce privește e-mailurile sau alertele de chat sunt trimise conform celor declarate de configurațiile de configurare. Acesta este un exemplu de dezactivare a e-mailurilor și trimiterea lor către IRC:
     notificări: email: false irc: "chat.freenode.net # travis"

Validating .travis.yml

După cum puteți vedea, fișierul .travis.yml devine foarte important în declanșarea construcțiilor automate. Dacă acest fișier nu este valid, Travis CI nu va declanșa construirea pe fiecare împingere către Github. Prin urmare, asigurarea că avem un fișier valabil pe care Travis CI îl va interpreta corect este important. Pentru aceasta, vom instala o bijuterie numită travis-lint și vom rula fișierul .travis.yml

 $ gem instalare travis-lint $ travis-lint .travis.yml


Construiți imagini de stare

Este foarte util să includeți o mică imagine pentru a indica starea actuală a construcției. Imaginea însăși poate fi accesată din modelul de adresă URL http://travis-ci.org/[username]/[repository-name].png. O altă modalitate de a accesa rapid imaginile încorporate în diferite formate se află pe pagina proiectului Travis CI în sine. De exemplu, putem copia formatul Markdown și încorpora în proiect README.md fişier.


O altă modalitate interesantă de a urmări stadiile de construire a diverselor proiecte open source în timp ce navigați în jurul Github este de a instala una dintre extensiile browserului. Acest lucru va pune imaginile stadiului de construcție în mod proeminent, alături de fiecare nume de proiect.


Resurse pe Travis CI

Iată câteva resurse privind conceptul de integrare continuă, precum și învățarea și integrarea Travis CI în proiectele noastre Github:

O modalitate fantastică de a afla ce și cum să includă diferite configurații de configurare în .travis.yml fișierul este de a naviga prin multe dintre cele mai populare depozite de surse deschise care deja integrează Travis CI. Iată câteva:

  1. Ruby on Rails (Ruby)
  2. BackboneJS (JavaScript)
  3. Compozitor (PHP)
  4. Flage (Python)

Sper că aceasta vă oferă o scurtă prezentare a modului în care putem integra cu ușurință Travis CI în proiectele noastre Github. Este foarte usor de folosit, asa ca incercati si integrati continuu o briza pentru echipa dumneavoastra!