Opret en Build-rørledning med Travis CI

1. Introduktion

I moderne softwareudvikling er udtrykket rørledning vænner sig meget. Men hvad er det?

Generelt sagt, en build-pipeline er et sæt automatiserede trin, der flytter kode fra udvikling til produktion.

Byg rørledninger er gode til implementering af kontinuerlige integrationsarbejdsprocesser til software. De tillader os at opbygge mindre ændringer med større frekvens, med det mål at finde fejl tidligere og reducere deres indvirkning.

I denne vejledning ser vi på at opbygge en simpel byggepipeline ved hjælp af Travis CI.

2. Trin i en Build Pipeline

En build-rørledning kan bestå af mange forskellige trin, men i det mindste skal den omfatte:

  • Kompilering af kode: i vores tilfælde betyder det at kompilere Java-kildekode i klassefiler
  • Udførelse af test: som at køre enhedstest og muligvis integrationstest
  • Implementering af artefakter: emballage overholdt kode i artefakter, sig ind krukke filer og implementere dem

Hvis en applikation bruger forskellige teknologier, så yderligere trin kan inkluderes i build-pipelinen. For eksempel har vi muligvis et yderligere trin, der minimerer JavaScript-filer eller offentliggør opdateret API-dokumentation.

3. Hvad er Travis CI?

Vi bruger vores pipeline til prøveopbygning Travis CI, et skybaseret kontinuerligt integrationsværktøj.

Dette har en række funktioner, der gør det til et godt valg til at komme i gang med at bygge rørledninger:

  • Integreres hurtigt med ethvert offentligt GitHub-lager
  • Understøtter hvert større programmeringssprog
  • Implementerer til flere forskellige skyplatforme
  • Tilbyder en række værktøjer til beskeder og alarmering

På et højt niveau fungerer det ved at overvåge et GitHub-lager for nye forpligtelser.

Når der foretages en ny forpligtelse, udfører den trinene i build-pipelinen som defineret i en konfigurationsfil (mere om dette nedenfor). Hvis et trin mislykkes, afslutter rørledningen, og det giver os besked.

Uden for boksen kræver Travis CI meget lidt konfiguration. Den eneste nødvendige konfiguration er at specificere programmeringssprog.

Vi kan altid give mere konfiguration til at skræddersy vores pipeline, hvis det er nødvendigt. For eksempel kan vi begrænse, hvad grene udløser builds, tilføje yderligere trin til pipelinen og meget mere.

3.1. Gratis og betalte versioner

Det er vigtigt at vide, at Travis CI i øjeblikket har 2 tilbud: en gratis og en betalt version.

Den gratis version, betegnet med .org domænenavn, tilbyder fulde muligheder til ethvert offentligt GitHub-lager. Der er ingen grænser for antallet af builds eller repositories, selvom der er pålagt ressourcegrænser, når din pipeline kører.

Den betalte version, der bruger .com domænenavn er påkrævet for private GitHub-arkiver. Det tilbyder også flere samtidige builds og ubegrænsede build-minutter sammenlignet med den gratis plan. Der er en gratis prøveperiode for de første 100 builds for at teste den betalte version.

4. Oprettelse af en Build-rørledning med Travis CI

Til denne vejledning bruger vi den gratis version, der er nævnt ovenfor. Ethvert offentligt arkiv kan bruges til at oprette en gratis pipeline.

Alt, hvad vi skal gøre, er at logge ind på Travis CI med vores GitHub-konto og autorisere den:

Når vi har givet tilladelser til vores GitHub-konto, er vi klar til at begynde at konfigurere vores build-pipeline.

4.1. Konfiguration af lageret

Oprindeligt betragtes alle vores offentlige arkiver som inaktive. For at løse dette, vi skal aktivere vores lager fra siden med kontoindstillinger.

Dette viser alle vores offentlige arkiver sammen med en vippeknap. Ved at klikke på skifteknappen konfigureres Travis CI til at begynde at overvåge datalageret for nye forpligtelser ved hjælp af standardgrenen for mestre:

Bemærk, at hvert arkiv også har en Indstillinger knap. Det er her, vi kan konfigurere forskellige pipelineadfærd:

  • Definer hvilke begivenheder, der udløser rørledningen (skubber, trækker anmodninger osv.)
  • Indstil miljøvariabler, der sendes til pipelinen
  • Automatisk annullering af builds, når nye begivenheder udløses

I denne vejledning fungerer standardindstillingerne fint. Senere ser vi, hvordan du tilsidesætter nogle af standardadfærdene.

4.2. Oprettelse af Travis-konfigurationen

Det næste trin er at oprette en ny fil med navnet .travis.yml i rodmappen i vores arkiv. Denne fil indeholder alle de oplysninger, der kræves for at konfigurere en pipeline. Uden denne fil udføres rørledningen ikke.

Til denne vejledning skal vi bare medtage den absolutte minimumskonfiguration, som specificerer programmeringssproget:

sprog: java

Det er det! Uden at give flere oplysninger udfører Travis CI en simpel pipeline, der:

  • Kompilerer vores kildekode
  • Udfører vores tests

Når vi begår .travis.yml fil Travis starter vores første build. Enhver yderligere forpligter sig til mestre filial udløser yderligere builds. Dashboardet giver os også mulighed for manuelt at udløse rørledningen til enhver tid uden at kræve en forpligtelse eller pull-anmodning.

5. Yderligere konfiguration

I det forrige afsnit så vi, at en enkelt konfigurationslinje er alt, hvad vi har brug for for at køre vores build-pipeline. Men de fleste projekter kræver yderligere konfiguration for at implementere en meningsfuld pipeline.

Dette afsnit beskriver nogle af de mere nyttige konfigurationer, som vi måske vil føje til vores pipeline.

5.1. Ændring af standardbygningskommandoen

Standardkommandoen, der bruges til at bygge Maven-projekter, er:

mvn test -B

Vi kan ændre dette til enhver kommando ved at indstille manuskript direktiv i .travis.yml:

script: mvn-pakke -DskipTests

Det er muligt at kæde sammen flere kommandoer i en enkelt manuskript linje ved hjælp af && operatør.

Nogle build-kommandoer er komplekse og kan spænde over flere linjer eller have kompleks logik. For eksempel kan de udføre forskellige handlinger baseret på miljøvariabler.

I disse tilfælde anbefales det at placere build-kommandoen i et enkeltstående script, og kald det script indefra konfigurationsfilen:

script: ./build.sh

5.2. Implementering af kode

Standardbygningsindstillingerne til Java-projekter kompilerer bare koden og udfører test. De resulterende artefakter (.jar-filer osv.) Kasseres i slutningen af ​​rørledningen, medmindre vi distribuerer dem et eller andet sted.

Travis CI understøtter en række velkendte tredjeparts tjenester. Artefakter kan kopieres til mange populære cloud-opbevaringssystemer såsom Amazon S3, Google Cloud Storage, Bintray og mere.

Det kan også distribuere kode direkte til de mest populære cloud computing-platforme såsom AWS, Google App Engine, Heroku og mange flere.

Nedenfor er et eksempel på en konfiguration, der viser, hvordan vi kan implementere til Heroku. For at generere krypterede egenskaber skal vi bruge Travis CLI-værktøjet.

deploy: provider: heroku api_key: secure: "ENCRYPTED_API_KEY"

Derudover giver den en generel implementeringsmulighed, der giver os mulighed for at skrive vores eget implementeringsscript. Dette er nyttigt, hvis vi har brug for at installere artefakter til et tredjepartssystem, der ikke understøttes indbygget.

For eksempel kunne vi skrive et shell-script, der sikkert kopierer artefakterne til en privat FTP-server:

deploy: provider: script script: bash. / custom-deploy.sh

5.3. Styring af hvilke grene, der udløser rørledningen

Som standard udføres rørledningen for enhver forpligtelse på mestre. Imidlertid bruger de fleste store projekter en eller anden form for git-forgrening til at styre udviklingscyklusser.

Travis CI understøtter både hvid og sortliste af gitgrene for at bestemme, hvilke forpligtelser der skal udløse rørledningen.

Overvej som eksempel følgende konfiguration:

grene: kun: - frigivelse - stabil undtagen: - master - om natten

Dette ville ignorere forpligtelser på mestre og om natten grene. Forpligter sig til frigøre og stabil grene ville udløse rørledningen. Bemærk, at kun Direktivet har altid forrang over undtagen direktiv.

Vi kan også bruge regulære udtryk til at kontrollere, hvilke grene der udløser rørledningen:

filialer: kun: - /^development.*$/

Dette starter kun rørledningen for forpligtelser på grene, der starter med udvikling.

5.4. Springer over specifikke forpligtelser

Vi kan bruge git commit-beskeden til at springe individuelle forpligtelser over. Travis CI vil undersøge meddelelsen for følgende mønstre:

  • springe
  • springe

Hvor er en af ​​følgende værdier:

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

Hvis forpligtelsesmeddelelsen matcher et af disse mønstre, kører pipelinen ikke.

5.5. Brug af forskellige bygningsmiljøer

Standardbygningsmiljøet til Java-projekter er Ubuntu Linux. Rørledninger kan også udføres på Mac OSX eller Windows Server ved at tilføje følgende konfiguration til .travis.yml:

os: osx # kan også være 'windows'

Selv med Linux er der 3 forskellige distributioner, som vi kan vælge imellem:

os: linux dist: xenial # andre valg er 'pålidelige' eller 'præcise'

Dokumentationen til byggeplatformen dækker alle tilgængelige miljøer og deres forskelle.

Husk bare, at hvis vi ændrer platformen, er vi muligvis også nødt til at ændre enhver brugerdefineret bygge eller indsætte scripts for at sikre kompatibilitet. Der er flere måder at håndtere flere operativsystemer i konfiguration på.

5.6. Brug af forskellige JDK-versioner

Vi kan også teste mod en bestemt version af JDK ved at indstille følgende konfiguration i .travis.yml fil:

jdk: oraclejdk8

Husk, at forskellige bygningsmiljøer, selv de forskellige Linux-distributioner, kan have forskellige JDK-versioner tilgængelige. Se dokumentationen for hvert miljø for at se den fulde liste over JDK-versioner.

6. Byg matricer

Hver gang vores pipeline kører, kører den som standard et enkelt job. Dette betyder, at alle faser af rørledningen udføres sekventielt på en enkelt virtuel maskine med de samme indstillinger.

Men en af ​​de store funktioner i Travis CI er evnen til at oprette en build-matrix. Dette giver os mulighed for at køre flere job for hver forpligtelse ved hjælp af forskellige værdier for nogle af de indstillinger, vi så tidligere.

For eksempel kan vi bruge en build-matrix til at køre vores pipeline på både Linux og Mac OSX eller med både JDK 8 og 9.

Der er to måder at oprette build-matricer på. Først, vi kan levere en række værdier til en eller flere af de sprog- og miljøkonfigurationer, vi så tidligere. For eksempel:

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

Ved hjælp af denne tilgang udvider Travis CI automatisk enhver kombination af konfiguration til at danne flere job. I ovenstående eksempel ville resultatet være fire samlede job.

Den anden måde at oprette en byggematrix på er at bruge matrix. inkluderer direktiv. Dette lader os udtrykkeligt erklære, hvilke kombinationer vi vil køre:

sprog: java matrix: inkluderer: - jdk: openjdk8 os: linux - jdk: openjdk9 os: osx

Eksemplet ovenfor ville resultere i to job.

Endnu en gang, hvis vi bygger på flere operativsystemer, skal vi være forsigtige med at sikre vores bygge og implementering scripts fungerer i alle tilfælde. Shell-scripts fungerer f.eks. Ikke på Windows. Vi skal bruge korrekte betingelser for at håndtere forskellige operativsystemer.

Der er flere muligheder, der giver mere detaljeret kontrol over, hvilke job der skal oprettes, og hvordan man håndterer fejl.

7. Konklusion

I denne artikel oprettede vi en simpel build-pipeline ved hjælp af Travis CI. Brug hovedsagelig ud af boksens konfiguration, vi oprettede en pipeline, der bygger kode og kører tests.

Vi så også en lille prøve af, hvor konfigurerbar Travis CI er. Det fungerer med en række programmeringssprog og tredjeparts cloud-platforme. Den ene ulempe er, at den i øjeblikket kun fungerer med GitHub-arkiver.