Stvorite cjevovod za izgradnju s Travis CI

1. Uvod

U suvremenom razvoju softvera, pojam cjevovod puno se navikne. Ali što je to?

Općenito govoreći, cjevovod gradnje skup je automatiziranih koraka koji premještaju kôd iz razvoja u proizvodnju.

Cjevovodi gradnje izvrsni su za implementaciju tijekova kontinuirane integracije softvera. Dopuštaju nam graditi manje promjene s većom učestalošću, s ciljem što bržeg pronalaska bugova i smanjenja njihovog utjecaja.

U ovom uputstvu pogledat ćemo izgradnju jednostavnog cjevovoda za izgradnju pomoću Travis CI.

2. Koraci u cjevovodu za izgradnju

Cjevovod za izgradnju može se sastojati od mnogo različitih koraka, ali najmanje bi trebao sadržavati:

  • Sastavljanje koda: u našem slučaju to znači kompajliranje Java izvornog koda u datoteke klase
  • Izvršenje testova: poput pokretanja jediničnih testova i eventualno integracijskih testova
  • Raspoređivanje artefakata: pakiranje je poštivalo kod u artefakte, recimo u staklenka datoteke i njihovo raspoređivanje

Ako aplikacija koristi različite tehnologije, tada dodatni koraci mogu se uključiti u cjevovod izgradnje. Na primjer, možda imamo dodatni korak koji umanjuje JavaScript datoteke ili objavljuje ažuriranu API dokumentaciju.

3. Što je Travis CI?

Koristit ćemo naš uzorak cjevovoda za izgradnju Travis CI, alat za kontinuiranu integraciju zasnovan na oblaku.

Ovo ima brojne značajke koje ga čine izvrsnim izborom za početak gradnje cjevovoda:

  • Brzo se integrira s bilo kojim javnim GitHub spremištem
  • Podržava svaki glavni programski jezik
  • Postavlja se na više različitih oblačnih platformi
  • Nudi razne alate za razmjenu poruka i upozorenje

Na visokoj razini, radi nadgledanjem GitHub spremišta za nove predaje.

Kada se izvrši novo urezivanje, izvršava korake cjevovoda izgradnje kako je definirano u konfiguracijskoj datoteci (više o tome u nastavku). Ako bilo koji korak ne uspije, cjevovod se završava i on će nas obavijestiti.

Izvan okvira, Travis CI zahtijeva vrlo malo konfiguracije. Jedina potrebna konfiguracija je određivanje programskog jezika.

Uvijek možemo pružiti više konfiguracije za prilagodbu našeg cjevovoda ako je potrebno. Na primjer, možemo ograničiti grane koje pokreću gradnje, dodati dodatne korake u cjevovod i još mnogo toga.

3.1. Besplatne i plaćene verzije

Važno je znati da Travis CI trenutno ima dvije ponude: besplatnu i plaćenu verziju.

Besplatna verzija, označena s .org ime domene, nudi pune mogućnosti za bilo koje javno spremište GitHub. Ne postoje ograničenja za broj izrada ili spremišta, iako postoje ograničenja resursa koja se nameću kada vaš cjevovod radi.

Plaćena verzija koja koristi .com ime domene, potrebno je za privatna GitHub spremišta. Također nudi istodobnije izrade i neograničene minute izrade u odnosu na besplatni plan. Za prvih 100 izrada postoji besplatna proba za testiranje plaćene verzije.

4. Stvaranje cjevovoda za izgradnju s Travis CI

Za ovaj ćemo vodič koristiti gore spomenutu besplatnu verziju. Bilo koje javno spremište može se koristiti za stvaranje besplatnog cjevovoda.

Sve što moramo učiniti je prijaviti se na Travis CI s našim GitHub računom i odobriti ga:

Nakon što dodijelimo dozvole za naš GitHub račun, spremni smo započeti konfiguriranje našeg cjevovoda za izgradnju.

4.1. Konfiguriranje spremišta

U početku se sva naša javna spremišta smatraju neaktivnima. Da biste to riješili, moramo omogućiti svoje spremište sa stranice postavki računa.

Ovdje su navedena sva naša javna spremišta, zajedno s preklopnim gumbom. Klikom na preklopni gumb konfigurirat ćete Travis CI da započne nadzirati to spremište za nove predaje, koristeći zadanu granu ovladati; majstorski:

Imajte na umu da svako spremište također ima Postavke dugme. Ovdje možemo konfigurirati različito ponašanje cjevovoda:

  • Definirajte koji događaji pokreću cjevovod (potiskivanja, povlačenje zahtjeva i tako dalje)
  • Postavite varijable okruženja koje se prosljeđuju u cjevovod
  • Automatsko otkazivanje gradnji kada se pokreću novi događaji

Za ovaj će vodič zadane postavke raditi u redu. Kasnije ćemo vidjeti kako nadjačati neko od zadanih ponašanja.

4.2. Stvaranje Travisove konfiguracije

Sljedeći je korak stvaranje nove datoteke s imenom .travis.yml u korijenskom direktoriju našeg spremišta. Ova datoteka sadrži sve informacije potrebne za konfiguriranje cjevovoda. Bez ove datoteke, cjevovod se neće izvršiti.

Za ovaj vodič samo trebamo uključiti minimalnu konfiguraciju koja određuje programski jezik:

jezik: java

To je to! Bez pružanja dodatnih informacija, Travis CI izvršit će jednostavan cjevovod koji:

  • Sastavlja naš izvorni kod
  • Izvršava naše testove

Jednom kada počinimo .travis.yml datoteka Travis započet će našu prvu izgradnju. Svako daljnje obvezivanje na ovladati; majstorski grana će pokrenuti dodatne gradnje. Nadzorna ploča također nam omogućuje ručno aktiviranje cjevovoda u bilo kojem trenutku bez potrebe za zahvatom ili povlačenjem.

5. Dodatna konfiguracija

U prethodnom smo odjeljku vidjeli da je jedan red konfiguracije sve što nam treba za pokretanje našeg cjevovoda za izgradnju. No, za većinu projekata bit će potrebna dodatna konfiguracija za provedbu smislenog cjevovoda.

Ovaj odjeljak opisuje neke korisnije konfiguracije koje bismo mogli dodati našem cjevovodu.

5.1. Promjena zadane naredbe za izgradnju

Zadana naredba koja se koristi za izgradnju Maven projekata je:

mvn test -B

To možemo promijeniti u bilo koju naredbu postavljanjem skripta direktiva u .travis.yml:

skripta: mvn paket -DskipTests

Moguće je povezati više naredbi u jednu skripta linija pomoću && operater.

Neke su naredbe za izgradnju složene i mogu obuhvaćati više redaka ili imati složenu logiku. Na primjer, mogu izvoditi različite radnje na temelju varijabli okoline.

U tim se slučajevima preporučuje naredbu za izgradnju smjestiti u samostalnu skriptui pozovite tu skriptu iz konfiguracijske datoteke:

skripta: ./build.sh

5.2. Kôd za postavljanje

Zadane postavke gradnje za Java projekte jednostavno kompajliraju kôd i izvršavaju testove. Dobiveni artefakti (.jar datoteke, itd.) Odbacuju se na kraju cjevovoda, osim ako ih negdje ne rasporedimo.

Travis CI podržava niz poznatih usluga trećih strana. Artefakti se mogu kopirati u mnoge popularne sustave za pohranu u oblaku kao što su Amazon S3, Google Cloud Storage, Bintray i drugi.

Također može rasporediti kôd izravno na najpopularnije platforme za računalstvo u oblaku kao što su AWS, Google App Engine, Heroku i mnoge druge.

Ispod je primjer konfiguracije koja pokazuje kako se možemo rasporediti na Heroku. Da bismo generirali šifrirana svojstva, moramo upotrijebiti alat Travis CLI.

implementacija: usluga: heroku api_key: sigurno: "ENCRYPTED_API_KEY"

Uz to, nudi generičku opciju implementacije koja nam omogućuje da napišemo vlastitu skriptu za implementaciju. Ovo je korisno ako moramo rasporediti artefakte u sustav treće strane koji nije izvorno podržan.

Na primjer, mogli bismo napisati skriptu ljuske koja sigurno kopira artefakte na privatni FTP poslužitelj:

implementacija: pružatelj: skripta skripte: bash ./custom-deploy.sh

5.3. Upravljanje granama koje pokreću cjevovod

Prema zadanim postavkama, cjevovod će se izvršiti za svako urezivanje ovladati; majstorski. Međutim, većina velikih projekata koristi neki oblik git grananja za upravljanje razvojnim ciklusima.

Travis CI podržava bijelu i crnu listu git grana kako bi se utvrdilo koji bi počinci trebali pokrenuti cjevovod.

Kao primjer uzmite u obzir sljedeću konfiguraciju:

grane: samo: - puštanje - stabilno osim: - majstor - noćno

Ovo bi zanemarilo obveze na ovladati; majstorski i noću grane. Obavezuje se na puštanje i stabilan grane bi pokrenule cjevovod. Imajte na umu da samo direktiva uvijek ima prednost nad osim direktiva.

Također možemo koristiti regularne izraze kako bismo kontrolirali koje grane pokreću cjevovod:

ogranci: samo: - /^razvoj.*$/

Ovo bi pokrenulo cjevovod samo za predaje na granama koje započinju s razvoj.

5.4. Preskakanje određenih obveza

Poruku git commit možemo koristiti za preskakanje pojedinačnih predavanja. Travis CI će u poruci ispitati sljedeće obrasce:

  • preskočiti
  • preskočiti

Gdje je bilo koja od sljedećih vrijednosti:

  • ci
  • travis
  • travis ci
  • travis-ci
  • travisci

Ako se poruka ureziva podudara s bilo kojim od ovih obrazaca, cjevovod se neće pokrenuti.

5.5. Korištenje različitih okruženja gradnje

Zadano okruženje za izradu Java projekata je Ubuntu Linux. Cjevovodi se mogu izvršiti i na Mac OSX-u ili Windows poslužitelju dodavanjem sljedeće konfiguracije u .travis.yml:

os: osx # može biti i 'windows'

Čak i s Linuxom, možemo odabrati između 3 različite distribucije:

os: linux dist: xenial # drugi izbor je "pouzdan" ili "precizan"

Dokumentacija o platformi za izgradnju pokriva sva dostupna okruženja i njihove razlike.

Sjetite se samo da ćemo, ako promijenimo platformu, možda trebati promijeniti i bilo koji običaj izgraditi ili rasporediti skripte kako bi se osigurala kompatibilnost. Postoji nekoliko načina za obradu više operativnih sustava u konfiguraciji.

5.6. Korištenje različitih JDK verzija

Također možemo testirati određenu verziju JDK postavljanjem sljedeće konfiguracije u .travis.yml datoteka:

jdk: oraclejdk8

Imajte na umu da različita okruženja gradnje, čak i različite distribucije Linuxa, mogu imati dostupne različite JDK verzije. Pogledajte dokumentaciju za svako okruženje da biste vidjeli cjeloviti popis JDK verzija.

6. Izgraditi matrice

Prema zadanim postavkama, svaki put kad naš cjevovod radi, on se izvodi kao jedan posao. To znači da se sve faze cjevovoda izvršavaju sekvencijalno na jednom virtualnom stroju s istim postavkama.

No, jedna od sjajnih značajki Travis CI-a je sposobnost stvaranja matrice gradnje. To nam omogućuje pokretanje više poslova za svako urezivanje, koristeći različite vrijednosti za neke postavke koje smo vidjeli ranije.

Na primjer, možemo koristiti matricu gradnje za pokretanje našeg cjevovoda i na Linuxu i na Mac OSX-u, ili na oba JDK 8 i 9.

Postoje dva načina za stvaranje matrica gradnje. Prvi, možemo pružiti niz vrijednosti za jednu ili više konfiguracija jezika i okoline koje smo vidjeli ranije. Na primjer:

jezik: java jdk: - openjdk8 - openjdk9 os: - linux - osx

Korištenjem ovog pristupa, Travis CI automatski će proširiti svaku kombinaciju konfiguracije kako bi oblikovao više poslova. U gornjem primjeru rezultat bi bio ukupno četiri radna mjesta.

Drugi način stvaranja matrice gradnje je upotreba matrica.uključi direktiva. To nam omogućuje izričitu izjavu koje kombinacije želimo pokretati:

jezik: java matrica: uključuje: - jdk: openjdk8 os: linux - jdk: openjdk9 os: osx

Gornji primjer rezultirao bi s dva posla.

Još jednom, ako gradimo na više operativnih sustava, moramo biti oprezni kako bismo osigurali svoj izgraditi i raspoređivanje skripte rade za sve slučajeve. Na primjer, skripte ljuske neće raditi na sustavu Windows. Moramo koristiti odgovarajuće uvjetne izjave za rukovanje različitim operativnim sustavima.

Postoji više opcija koje pružaju detaljniju kontrolu nad zadacima koje treba stvoriti i načinom rješavanja kvarova.

7. Zaključak

U ovom smo članku stvorili jednostavan cjevovod za izgradnju koristeći Travis CI. Koristeći uglavnom konfiguraciju izvan okvira, stvorili smo cjevovod koji gradi kôd i pokreće testove.

Također smo vidjeli mali uzorak koliko je Travis CI prilagodljiv. Radi s raznim programskim jezicima i oblačnim platformama treće strane. Mana je što trenutno radi samo s GitHub repozitorijima.