Close

Wat is continue integratie?

Maak je team meer agile met snellere feedback. Omdat je maar zo snel beweegt als je tests.


Continue integratie (CI) is het automatiseren van de integratie van codewijzigingen van meerdere bijdragers binnen één softwareproject. Het is een primaire best practice voor DevOps, waarbij ontwikkelaars vaak codewijzigingen kunnen samenvoegen in een centrale repository waar builds en tests vervolgens worden uitgevoerd. Geautomatiseerde tools worden gebruikt om te bevestigen dat de nieuwe code correct is vóór de integratie.

Een versiebeheersysteem van broncode is de kern van het CI-proces. Het versiebeheersysteem wordt ook aangevuld met andere controles, zoals geautomatiseerde kwaliteitstests van code, tools voor het beoordelen van syntax-stijl en meer.

Hoe kom je tot continue integratie

Ontdek hoe je continue integratie en geautomatiseerde tests toepast in vijf stappen. Lees het artikel

Vijf tips voor CI-vriendelijke Git-repo's

Vijf tips om het beste uit Git en je tool voor continue integratie te halen! Lees het artikel

Tools voor continue integratie

Vijf tips om het beste uit Git en je tool voor continue integratie te halen! Lees het artikel

Op trunk-gebaseerde ontwikkeling

Ontdek ontwikkeling op basis van trunk, een praktijk voor versiebeheer waarbij ontwikkelaars kleine, frequente updates samenvoegen tot een kern “trunk” of hoofd-branch. Lees het artikel

Tutorial Continue integratie

Deze tutorial laat je zien hoe je aan de slag kunt met continue integratie in drie eenvoudige stappen. Probeer de tutorial


Het belang van continue integratie

Om het belang van CI te begrijpen, is het nuttig om eerst enkele pijnpunten te bespreken die vaak optreden als gevolg van de afwezigheid van CI. Zonder CI moeten ontwikkelaars handmatig coördineren en communiceren wanneer ze code bijdragen aan het eindproduct. Deze coördinatie reikt verder dan de ontwikkelingsteams, maar ook de operaties en de rest van de organisatie. Productteams coördineren wanneer ze achtereenvolgens functies en fixes moeten starten en welke teamleden verantwoordelijk zijn.

De communicatie van een niet-CI-omgeving kunnen een complexe en verwarde synchronisatieklus worden, wat onnodige bureaucratische kosten aan een project toevoegt. Dit zorgt voor tragere codereleases met meer kans op fouten, omdat ontwikkelaars dan extra aandacht moeten besteden aan de integraties. Deze risico's nemen exponentieel toe naarmate de omvang van het engineeringteam en de codebase toenemen.

Zonder een robuuste CI-pipeline kan er een kloof ontstaan tussen het technische team en de rest van de organisatie. De communicatie tussen productie en engineering kan omslachtig zijn. Engineering wordt een zwarte doos waarin de rest van het team de vereisten en functies invoert en misschien de verwachte resultaten terugkrijgt. Het zal het voor ingenieurs moeilijker maken om een tijdstip van levering van aanvragen in te schatten, omdat de tijd om nieuwe wijzigingen te integreren een onbekend risico wordt.

Wat doet CI

CI helpt om het personeelsbestand en de leveringscapaciteit van technische teams op te schalen. Door CI toe te voegen aan het eerder genoemde scenario, kunnen softwareontwikkelaars onafhankelijk en tegelijkertijd aan functies werken. Wanneer ze klaar zijn om deze functies samen te voegen in het eindproduct, kunnen ze dat onafhankelijk en snel doen. CI is een waardevolle en gevestigde praktijk in moderne, goed presterende organisaties voor software-engineering.

Hoe CI kan worden gebruikt

CI wordt over het algemeen gebruikt in combinatie met een agile workflow voor softwareontwikkeling. Een organisatie stelt een takenlijst samen die bestaat uit een roadmap voor het product. Deze taken worden vervolgens verdeeld onder de leden van het software-engineeringteam, zodat ze kunnen worden uitgevoerd. Door CI te gebruiken, kunnen deze softwareontwikkelingstaken onafhankelijk en parallel worden ontwikkeld door de toegewezen ontwikkelaars. Zodra een van deze taken is voltooid, zal een ontwikkelaar dat nieuwe werk introduceren in het CI-systeem, zodat het kan worden geïntegreerd met de rest van het project.

CI versus continue implementatie versus continue levering

Continue integratie, implementatie en levering zijn drie fasen van een geautomatiseerde softwarereleasepipeline, waaronder een DevOps-pipeline. In deze drie fasen wordt software van idee naar levering aan de eindgebruiker gebracht. De integratiefase is de eerste stap in het proces. Voortdurende integratie omvat het proces waarbij meerdere ontwikkelaars proberen hun codewijzigingen samen te voegen met de hoofdcoderepository van een project.

Continue levering is de volgende uitbreiding van continue integratie. In de leveringsfase wordt een artefact samen verpakt, zodat het aan de eindgebruikers kan worden geleverd. In deze fase worden geautomatiseerde tools gebruikt om dit artefact te genereren. Deze bouwfase wordt 'groen' gehouden, wat betekent dat het artefact op elk moment klaar moet zijn om door gebruikers te worden geïmplementeerd.

Continue implementatie is de laatste fase van de pipeline. De implementatiefase is verantwoordelijk voor het automatisch lanceren en distribueren van het software-artefact onder eindgebruikers. Tijdens de implementatie heeft het artefact de integratie- en leveringsfase met succes doorstaan. Nu is het tijd om het artefact automatisch te implementeren of te distribueren. Dit gebeurt via scripts of tools die het artefact automatisch verplaatsen naar openbare servers of naar een ander distributiemechanisme, zoals een app store.


Voordelen en uitdagingen van continue integratie

Voortdurende integratie is een essentieel aspect van DevOps en goed presterende softwareteams. De voordelen van CI zijn echter niet beperkt tot het technische team, maar komen de organisatie als geheel ten goede. CI zorgt voor meer transparantie en inzicht in het proces van softwareontwikkeling en -levering. Deze voordelen stellen de rest van de organisatie in staat om marktgerichte strategieën beter te plannen en uit te voeren. Hieronder volgen enkele algemene organisatorische voordelen van CI.

Maak schalen mogelijk

CI stelt organisaties in staat om op te schalen wat betreft de grootte van het technische team, de omvang van de codebase en de infrastructuur. Door de bureaucratie voor code-integratie en de overheadkosten voor communicatie tot een minimum te beperken, helpt CI bij het opbouwen van DevOps- en agile-workflows. Het stelt elk teamlid in staat om een nieuwe codewijziging te maken tot en met de release. CI maakt schaalbaarheid mogelijk door organisatorische afhankelijkheden tussen de ontwikkeling van individuele functies weg te nemen. Ontwikkelaars kunnen nu in een geïsoleerde silo aan functies werken en er zeker van zijn dat hun code naadloos zal worden geïntegreerd met de rest van de codebase, een centraal DevOps-proces.

Verbeter de feedbackloop

Snellere feedback op zakelijke beslissingen is een ander belangrijk neveneffect van CI. Productteams kunnen ideeën sneller testen en productontwerpen itereren met een geoptimaliseerd CI-platform. Veranderingen kunnen snel worden doorgevoerd en gemeten op succes. Bugs of andere problemen kunnen snel worden opgelost en hersteld.

Verbeter de communicatie

CI verbetert de algemene technische communicatie en verantwoording, wat een betere samenwerking tussen ontwikkeling en operations binnen een DevOps-team mogelijk maakt. Door workflows voor pull-aanvragen te introduceren die gekoppeld zijn aan CI, kunnen ontwikkelaars passief kennis delen. Met pull-aanvragen kunnen ontwikkelaars code van andere teamleden bekijken en hieronder opmerkingen plaatsen. Ontwikkelaars kunnen nu feature branches bekijken en eraan samenwerken met andere ontwikkelaars naarmate de features zich verder ontwikkelen in de CI-pipeline. CI kan ook worden gebruikt om te helpen bij de uitgaven voor QA. Een efficiënte CI-pipeline met betrouwbare geautomatiseerde testdekking beschermt tegen regressies en zorgt ervoor dat nieuwe functies voldoen aan een specificatie. Voordat een nieuwe code wordt samengevoegd, moet deze voldoen aan de CI-test beweringsuite, om nieuwe regressies te voorkomen.

De voordelen van CI wegen ruimschoots op tegen alle uitdagingen op het gebied van adoptie. Dat gezegd hebbende, is het belangrijk om op de hoogte te zijn van de uitdagingen van CI. De echte uitdagingen van CI doen zich voor bij de overgang van een project van geen CI naar CI. In de meeste moderne softwareprojecten wordt CI al in een vroeg stadium toegepast, waardoor de uitdagingen van latere adoptie worden weggenomen.

Ingebruikname en installatie

De uitdagingen van continue integratie liggen vooral in de adoptie door het team en de eerste technische installatie. Als een team momenteel geen CI-oplossing heeft, kan het wat moeite kosten om er een te kiezen en daarmee aan de slag te gaan. Bij de installatie van een CI-pipeline moeten dus overwegingen worden gemaakt met betrekking tot de bestaande technische infrastructuur.

Technologische leercurve

De CI-functionaliteit omvat een lijst van ondersteunende technologieën die voor het team een investering zijn om onder de knie te krijgen. Deze technologieën zijn versiebeheersystemen, hostinginfrastructuur en orkestratietechnologieën.


Aanbevolen werkwijzen voor CI

Testgestuurde ontwikkeling

Als een project eenmaal een CI-pipeline heeft opgezet met automatische testdekking, is het een aanbevolen om de testdekking voortdurend te ontwikkelen en te verbeteren. Voor elke nieuwe functie die in de CI-pipeline komt, moeten bijbehorende tests worden uitgevoerd om te bevestigen dat de nieuwe code zich naar verwachting gedraagt.

Test Driven Development, of, testgestuurde ontwikkeling (TDD) is de gewoonte om de testcode en testcases uit te schrijven voordat er daadwerkelijk een feature wordt gecodeerd. Pure TDD kan het productteam nauw betrekken om te helpen bij het opstellen van een specificatie van verwacht zakelijk gedrag, die vervolgens kan worden omgezet in de testcases. In een puur TDD-scenario zullen ontwikkelaars en het productteam elkaar ontmoeten en een specificatie of lijst met vereisten bespreken. Deze lijst met vereisten wordt vervolgens omgezet in een checklist met beweringen in de code. De ontwikkelaars zullen dan code schrijven die overeenkomt met deze beweringen.

Pull-aanvragen en codebeoordeling

De meeste moderne teams voor software-ontwikkeling werken via een pull- en codereview-workflow. Pull-aanvragen zijn essentieel voor effectieve CI. Een pull-aanvraag wordt aangemaakt wanneer een ontwikkelaar klaar is om nieuwe code samen te voegen in de hoofd-codebase. De pull-aanvraag brengt andere ontwikkelaars op de hoogte van de nieuwe reeks wijzigingen die klaar zijn voor integratie.

Pull-aanvragen zijn een goed moment om de CI-pipeline te starten en de reeks geautomatiseerde goedkeuringsstappen uit te voeren. Een aanvullende, handmatige goedkeuringsstap wordt gewoonlijk toegevoegd op het moment van de pull-aanvraag, waarbij een ingenieur die geen belanghebbende is, een codereview van de functie uitvoert. Dit biedt een fris inzicht in de nieuwe code en functionaliteit. De niet-belanghebbende zal bewerkingssuggesties doen en het pull-verzoek goedkeuren of afwijzen.

Pull-aanvragen en codebeoordeling zijn een krachtig instrument om passieve communicatie en kennisuitwisseling tussen een technisch team te bevorderen. Dit helpt om technische schulden te voorkomen in de vorm van kennissilo's, waarbij specifieke ingenieurs de enige belanghebbenden zijn voor bepaalde functies van een codebasis.

Optimaliseer de snelheid van de pipeline

Aangezien de CI-pipeline een centraal en veelgebruikt proces zal zijn, is het belangrijk om de uitvoeringssnelheid te optimaliseren. Elke kleine vertraging in de CI-workflow zal exponentieel toenemen naarmate het aantal nieuwe functies, de omvang van het team en de omvang van de codebase toenemen. Het is aanbevolen om de snelheid van de CI-pipeline te meten en waar nodig te optimaliseren.

Een snellere CI-pipeline maakt snellere feedback op producten mogelijk. Ontwikkelaars kunnen wijzigingen snel pushen en experimenteren met nieuwe functie-ideeën om de gebruikerservaring te helpen verbeteren. Eventuele bugs kunnen snel worden gepatcht en afgesloten zodra ze worden ontdekt. Deze verhoogde uitvoeringssnelheid kan zowel voordeel bieden ten opzichte van andere concurrenten als een algemene ervaring van hogere kwaliteit voor je klanten.


Aan de slag met continue integratie

De fundamentele afhankelijkheid van CI is een versiebeheersysteem (VCS). Als de doel-codebasis voor een CI-installatie geen VCS heeft, is stap één het installeren van een VCS. De afwezigheid van een VCS zou volgens moderne codebases zeer onwaarschijnlijk moeten zijn. Enkele populaire VCS's zijn Git, Mercurial en Subversion.

Als het versiebeheer eenmaal is ingesteld, is het vinden van een hostingplatform voor versiebeheer de volgende stap. De meeste moderne hostingtools voor versiebeheer hebben support en functies ingebouwd voor CI. Enkele populaire hostingplatforms voor versiebeheer zijn Bitbucket, Github en Gitlab.

Nadat het versiebeheer van het project is ingesteld, moeten de stappen voor goedkeuring van de integratie worden toegevoegd. De meest waardevolle stap om een integratie goed te keuren, is geautomatiseerde tests. Het toevoegen van geautomatiseerde tests aan een project kan initiële kosten met zich meebrengen. Er moet een test-framework worden geïnstalleerd en vervolgens moeten de testcode en testcases worden geschreven door ontwikkelaars.

Enkele ideeën voor andere, goedkopere mechanismen voor CI-goedkeuring om toe te voegen zijn syntax-controle, code-stijlformatters of kwetsbaarheidsscans van afhankelijkheden. Als je eenmaal een versiebeheersysteem hebt ingesteld en enkele goedkeuringsstappen hebt toegevoegd, heb je een continue integratie tot stand gebracht!

CI is niet alleen een bedrijfsproces dat specifiek is voor technische doeleinden. De rest van de organisatie, de marketing-, verkoop- en productteams zullen ook profiteren van een CI-pipeline. Productteams zullen moeten nadenken over hoe ze de uitvoering van gelijktijdige ontwikkelingsstromen parallel kunnen laten verlopen. Het productteam en engineering zullen nauw samenwerken om te bepalen welke zakelijke verwachtingen voor functionaliteit in aanmerking komen voor de geautomatiseerde testsuite.

Marketing en verkoop zullen kunnen verwijzen naar de CI-pipeline om te coördineren met klantgerichte communicatie-inspanningen en -evenementen. CI geeft de rest van de organisatie een zekere mate van transparantie over de voortgang van de technische uitvoering. Dit hulpprogramma voor transparantie en communicatie integreert naadloos met een agile workflow voor projectontwikkeling.


Conclusie...

Als je organisatie ernaar streeft om te profiteren van een DevOps-aanpak of gewoon een softwareteam met meerdere ontwikkelaars heeft, is CI belangrijk. Het zal je technische organisatie helpen om sneller en effectiever te werken.

CI is een vast onderdeel van moderne, efficiënte organisaties voor software-ontwikkeling. De beste bedrijven hebben robuuste CI-pipelines en twijfelen niet over verdere investeringen in efficiëntie. De voordelen van CI zijn niet beperkt tot het technische team en zijn van toepassing op de hele organisatie.

Er bestaan veel tools van derden om te helpen bij het beheer en de installatie van CI. Enkele populaire opties zijn Codeship, Bitbucket Pipelines, SemaPhoreCI, CircleCI, Jenkins, Bamboo, Teamcity en vele andere. Deze tools hebben hun eigen uitgebreide installatiehandleidingen en documentatie om aan de slag te gaan.

Probeer een aantal van de beste CI-tools van Atlassian uit:

Bitbucket Pipelines is een geweldig hulpmiddel om een project bij te werken met moderne CI-functies.

Jira is een van de populairste tools voor agile en DevOps-projectbeheer ter wereld. De tool integreert nauw met andere Bitbucket-projecten en kan, in combinatie met een CI-pipeline, een zeer transparant beeld geven van de uitvoeringsstatus van een organisatie.

Max Rehkopf
Max Rehkopf

Als een zelfbenoemde “chaosmuppet”, gebruik ik agile werkwijzen en lean principes om orde te scheppen in mijn dagelijks leven. Ik vind het heerlijk om deze lessen met anderen te delen door middel van de vele artikelen, presentaties en video's die ik maak voor Atlassian 


Aanbevolen artikelen

Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.

Toelichting DevOps

DevOps-community

Afbeelding van kaart

Gratis aan de slag

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up