Maak een Build Pipeline met Travis CI

1. Inleiding

In moderne softwareontwikkeling is de term pijpleiding wordt veel gebruikt. Maar wat is het?

In het algemeen, een build-pijplijn is een reeks geautomatiseerde stappen die code van ontwikkeling naar productie verplaatsen.

Build-pijplijnen zijn geweldig voor het implementeren van doorlopende integratieworkflows voor software. Ze laten ons toe bouw kleinere veranderingen met een grotere frequentie, met als doel bugs sneller te vinden en de impact ervan te verkleinen.

In deze zelfstudie kijken we naar het bouwen van een eenvoudige build-pijplijn met Travis CI.

2. Stappen in een build-pijplijn

Een build-pijplijn kan uit veel verschillende stappen bestaan, maar moet minimaal het volgende bevatten:

  • Code compileren: in ons geval betekent dat het compileren van Java-broncode in klassebestanden
  • Tests uitvoeren: zoals het uitvoeren van unit-tests en mogelijk integratietests
  • Artefacten implementeren: verpakking voldoet aan code in artefacten, zeg maar in pot bestanden, en het implementeren ervan

Als een applicatie verschillende technologieën gebruikt, dan extra stappen kunnen worden opgenomen in de build-pijplijn. We hebben bijvoorbeeld een extra stap die JavaScript-bestanden verkleint of bijgewerkte API-documentatie publiceert.

3. Wat is Travis CI?

Voor onze pijplijn voor het bouwen van monsters gebruiken we Travis CI, een cloudgebaseerde tool voor continue integratie.

Dit heeft een aantal functies die het een uitstekende keuze maken om aan de slag te gaan met build-pijplijnen:

  • Integreert snel met elke openbare GitHub-repository
  • Ondersteunt elke belangrijke programmeertaal
  • Implementeert op meerdere verschillende cloudplatforms
  • Biedt een verscheidenheid aan berichten- en waarschuwingstools

Op een hoog niveau werkt het door een GitHub-repository te monitoren op nieuwe commits.

Wanneer een nieuwe commit wordt gemaakt, voert het de stappen van de build-pijplijn uit zoals gedefinieerd in een configuratiebestand (meer hierover hieronder). Als een stap mislukt, wordt de pijplijn beëindigd en wordt ons hiervan op de hoogte gesteld.

Travis CI vereist uit de doos zeer weinig configuratie. De enige vereiste configuratie is het specificeren van de programmeertaal.

We kunnen altijd meer configuratie bieden om onze pijplijn aan te passen, indien nodig. We kunnen bijvoorbeeld beperken welke branches builds triggeren, extra stappen aan de pijplijn toevoegen en nog veel meer.

3.1. Gratis en betaalde versies

Het is belangrijk om te weten dat Travis CI momenteel 2 aanbiedingen heeft: een gratis en een betaalde versie.

De gratis versie, aangeduid met de .org domeinnaam, biedt alle mogelijkheden voor elke openbare GitHub-repository. Er zijn geen limieten aan het aantal builds of repositories, hoewel er resourcelimieten worden opgelegd wanneer uw pijplijn actief is.

De betaalde versie, die de .com domeinnaam, is vereist voor privé GitHub-opslagplaatsen. Het biedt ook meer gelijktijdige builds en onbeperkte buildminuten in vergelijking met het gratis abonnement. Er is een gratis proefversie voor de eerste 100 builds om de betaalde versie te testen.

4. Creëren van een Build Pipeline met Travis CI

Voor deze tutorial gebruiken we de hierboven genoemde gratis versie. Elke openbare repository kan worden gebruikt om een ​​gratis pijplijn te maken.

Het enige wat we hoeven te doen is inloggen op Travis CI met ons GitHub-account en het autoriseren:

Nadat we machtigingen hebben verleend aan ons GitHub-account, zijn we klaar om te beginnen met het configureren van onze build-pijplijn.

4.1. De repository configureren

In eerste instantie worden al onze openbare opslagplaatsen als inactief beschouwd. Om dit op te lossen, we moeten onze repository inschakelen vanaf de pagina met accountinstellingen.

Hierin staan ​​al onze openbare opslagplaatsen, samen met een schakelknop. Door op de schakelknop te klikken, wordt Travis CI geconfigureerd om die repository te monitoren op nieuwe commits, met behulp van de standaardtak van meester:

Merk op dat elke repository ook een Instellingen knop. Dit is waar we verschillende pijplijngedragingen kunnen configureren:

  • Bepaal welke gebeurtenissen de pijplijn activeren (pushes, pull-aanvragen, enzovoort)
  • Stel omgevingsvariabelen in die aan de pijplijn worden doorgegeven
  • Auto-annuleer builds wanneer nieuwe evenementen worden geactiveerd

Voor deze zelfstudie werken de standaardinstellingen prima. Later zullen we zien hoe een deel van het standaardgedrag kan worden opgeheven.

4.2. De Travis-configuratie maken

De volgende stap is het maken van een nieuw bestand met de naam .travis.yml in de hoofdmap van onze repository. Dit bestand bevat alle informatie die nodig is om een ​​pijplijn te configureren. Zonder dit bestand wordt de pijplijn niet uitgevoerd.

Voor deze tutorial hoeven we alleen de absolute minimumconfiguratie op te nemen, die de programmeertaal specificeert:

taal: java

Dat is het! Zonder meer informatie te verstrekken, zal Travis CI een eenvoudige pijplijn uitvoeren die:

  • Compileert onze broncode
  • Voert onze tests uit

Zodra we het .travis.yml bestand Travis begint met onze eerste build. Elke verdere committeert zich aan meester branch zal extra builds activeren. Het dashboard stelt ons ook in staat om de pijplijn op elk moment handmatig te activeren zonder een vastleg- of pull-verzoek te vereisen.

5. Aanvullende configuratie

In de vorige sectie hebben we gezien dat een enkele configuratielijn alles is wat we nodig hebben om onze build-pijplijn uit te voeren. Maar de meeste projecten hebben extra configuratie nodig om een ​​zinvolle pijplijn te implementeren.

In dit gedeelte worden enkele van de handigere configuraties beschreven die we mogelijk aan onze pijplijn willen toevoegen.

5.1. De standaard build-opdracht wijzigen

De standaardopdracht die wordt gebruikt om Maven-projecten te bouwen, is:

mvn-test -B

We kunnen dit in elk commando veranderen door de script richtlijn in .travis.yml:

script: mvn-pakket -DskipTests

Het is mogelijk om meerdere commando's in een enkele keten aan elkaar te koppelen script lijn met behulp van de && operator.

Sommige build-opdrachten zijn complex en kunnen meerdere regels beslaan of een complexe logica hebben. Ze kunnen bijvoorbeeld verschillende acties uitvoeren op basis van omgevingsvariabelen.

In deze gevallen wordt aanbevolen om de build-opdracht in een zelfstandig script te plaatsen, en roep dat script aan vanuit het configuratiebestand:

script: ./build.sh

5.2. Code implementeren

De standaard build-instellingen voor Java-projecten compileren eenvoudig de code en voeren tests uit. De resulterende artefacten (.jar-bestanden, etc.) worden aan het einde van de pijplijn verwijderd, tenzij we ze ergens implementeren.

Travis CI ondersteunt een groot aantal bekende services van derden. Artefacten kunnen naar veel populaire cloudopslagsystemen worden gekopieerd, zoals Amazon S3, Google Cloud Storage, Bintray en meer.

Het kan ook code rechtstreeks implementeren op de meest populaire cloud computing-platforms zoals AWS, Google App Engine, Heroku en nog veel meer.

Hieronder ziet u een voorbeeldconfiguratie die laat zien hoe we kunnen implementeren op Heroku. Om versleutelde eigenschappen te genereren, moeten we de Travis CLI-tool gebruiken.

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

Bovendien biedt het een generieke implementatieoptie waarmee we ons eigen implementatiescript kunnen schrijven. Dit is handig als we artefacten moeten implementeren op een systeem van derden dat niet standaard wordt ondersteund.

We kunnen bijvoorbeeld een shellscript schrijven dat de artefacten veilig naar een privé-FTP-server kopieert:

implementeren: provider: scriptscript: bash ./custom-deploy.sh

5.3. Beheren welke filialen de pijplijn activeren

Standaard wordt de pijplijn uitgevoerd voor elke commit op meester. De meeste grote projecten gebruiken echter een vorm van git branching om ontwikkelingscycli te beheren.

Travis CI ondersteunt zowel witte als zwarte lijst van git-branches om te bepalen welke commits de pijplijn moeten activeren.

Beschouw als voorbeeld de volgende configuratie:

branches: alleen: - release - stabiel behalve: - master - nightly

Dit zou commits op de meester en nachtelijk takken. Zet zich in voor het vrijlating en stal takken zouden de pijplijn activeren. Merk op dat de enkel en alleen richtlijn heeft altijd voorrang op de behalve richtlijn.

We kunnen ook reguliere expressies gebruiken om te bepalen welke vertakkingen de pijplijn activeren:

branches: alleen: - /^development.*$/

Dit zou de pijplijn alleen starten voor commits op branches die beginnen met ontwikkeling.

5.4. Specifieke vastleggingen overslaan

We kunnen het git commit-bericht gebruiken om individuele commits over te slaan. Travis CI zal het bericht onderzoeken op de volgende patronen:

  • overspringen
  • overspringen

Waar is een van de volgende waarden:

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

Als het vastleggingsbericht overeenkomt met een van deze patronen, zal de pijplijn niet worden uitgevoerd.

5.5. Verschillende buildomgevingen gebruiken

De standaard build-omgeving voor Java-projecten is Ubuntu Linux. Pijplijnen kunnen ook worden uitgevoerd op Mac OSX of Windows Server door de volgende configuratie toe te voegen aan .travis.yml:

os: osx # kan ook 'windows' zijn

Zelfs met Linux zijn er 3 verschillende distributies waaruit we kunnen kiezen:

os: linux dist: xenial # andere keuzes zijn 'betrouwbaar' of 'nauwkeurig'

De documentatie van het buildplatform omvat alle beschikbare omgevingen en hun verschillen.

Houd er rekening mee dat als we het platform wijzigen, we mogelijk ook een aangepaste versie moeten wijzigen bouwen of inzetten scripts om compatibiliteit te garanderen. Er zijn verschillende manieren om met meerdere besturingssystemen in de configuratie om te gaan.

5.6. Verschillende JDK-versies gebruiken

We kunnen ook testen tegen een specifieke versie van de JDK door de volgende configuratie in het .travis.yml het dossier:

jdk: oraclejdk8

Houd er rekening mee dat verschillende build-omgevingen, zelfs de verschillende Linux-distributies, verschillende JDK-versies beschikbaar kunnen hebben. Raadpleeg de documentatie voor elke omgeving om de volledige lijst met JDK-versies te zien.

6. Bouw matrices

Elke keer dat onze pijplijn wordt uitgevoerd, wordt deze standaard als één taak uitgevoerd. Dit betekent dat alle fasen van de pijplijn opeenvolgend worden uitgevoerd op een enkele virtuele machine met dezelfde instellingen.

Maar een van de geweldige functies van Travis CI is de mogelijkheid om een ​​build-matrix te maken. Hierdoor kunnen we meerdere jobs uitvoeren voor elke commit, waarbij we verschillende waarden gebruiken voor enkele van de instellingen die we eerder zagen.

We kunnen bijvoorbeeld een build-matrix gebruiken om onze pijplijn op zowel Linux als Mac OSX te laten draaien, of met zowel JDK 8 als 9.

Er zijn twee manieren om build-matrices te maken. Eerste, we kunnen een reeks waarden opgeven voor een of meer van de taal- en omgevingsconfiguraties die we eerder zagen. Bijvoorbeeld:

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

Door deze aanpak te gebruiken, zal Travis CI automatisch elke combinatie van configuratie uitbreiden om meerdere taken te vormen. In het bovenstaande voorbeeld zou het resultaat in totaal vier taken zijn.

De tweede manier om een ​​build-matrix te maken, is door de matrix. omvatten richtlijn. Hierdoor kunnen we expliciet aangeven welke combinaties we willen uitvoeren:

taal: java matrix: include: - jdk: openjdk8 os: linux - jdk: openjdk9 os: osx

Het bovenstaande voorbeeld zou resulteren in twee banen.

Nogmaals, als we op meerdere besturingssystemen voortbouwen, moeten we ervoor zorgen dat onze bouwen en inzet scripts werken voor alle gevallen. Shell-scripts werken bijvoorbeeld niet op Windows. We moeten de juiste voorwaardelijke verklaringen gebruiken om met verschillende besturingssystemen om te gaan.

Er zijn meer opties die gedetailleerdere controle bieden over welke taken moeten worden gecreëerd en hoe fouten moeten worden afgehandeld.

7. Conclusie

In dit artikel hebben we een eenvoudige build-pijplijn gemaakt met behulp van Travis CI. Gebruikmakend van de meeste kant-en-klare configuratie, hebben we een pijplijn gemaakt die code bouwt en tests uitvoert.

We hebben ook een klein voorbeeld gezien van hoe configureerbaar Travis CI is. Het werkt met verschillende programmeertalen en cloudplatforms van derden. Het enige nadeel is dat het momenteel alleen werkt met GitHub-repositories.