Vad är Trunk-based development?
Trunk-based development (TBD) är en mjukvaruutvecklingsstrategi där ingenjörer slår samman mindre ändringar oftare till huvudkodsbasen och arbetar från trunk-kopian snarare än att arbeta på långlivade feature branches. Denna utvecklingsmodell används ofta som en del av ett continuous integration-arbetsflöde.
Varför använda Trunk-based development?
Med många ingenjörer som arbetar i samma kodbas är det viktigt att ha en strategi för källkodskontroll och hur individer arbetar tillsammans. För att undvika att skriva över varandras ändringar skapar ingenjörer sin egen kopia av kodbasen, kallad branches. I analogi med ett träd kallas huvudkopian ibland för mainline eller trunk. Processen att integrera ändringarna från en individs kopia till huvud-trunken kallas merging.
För att förstå Trunk-based development är det bra att först titta på den alternativa strategin, feature branch-utveckling.
Vid feature branch-utveckling slår inte individuella mjukvaruutvecklare eller team av ingenjörer samman sin nya branch förrän en funktion är klar, och arbetar ibland under veckor eller månader på en separat kopia.
Denna långa tidsperiod kan göra sammanslagningsprocessen svår eftersom trunk eller master branch sannolikt har förändrats på grund av att andra ingenjörer slagit samman sina kodändringar och versionskontroll blir svårt. Denna feature branching kan resultera i en utdragen kodgranskningsprocess när man vill skapa en release branch för driftsättning, vilket ofta resulterar i att många olika pull requests måste analyseras för att lösa sammanslagningskonflikter.
Fördelar med Trunk-based development
Trunk-based development tar ett mer kontinuerlig leverans-orienterat förhållningssätt till mjukvaruutveckling, och branches är kortlivade och slås samman så ofta som möjligt. Brancherna är mindre eftersom de ofta bara innehåller en del av en funktion. Dessa kortlivade utvecklingsbrancher gör sammanslagningsprocessen enklare eftersom det finns mindre tid för divergens mellan huvud-trunken och branch-kopiorna.
Trunk-based development är därmed en metodik för att snabbt lansera nya funktioner och små ändringar, och hjälper till att undvika långdragna felsökningar och «merge-helvete». Det är en alltmer populär DevOps-praxis bland agila utvecklingsteam och kombineras ofta med feature flags eller funktionsväxling för att säkerställa att nya funktioner snabbt och enkelt kan rullas tillbaka om buggar upptäcks.
Trunk-based development och feature flags
Praxisen med feature flagging (banbrytande av Martin Fowler), eller att omsluta nya funktioner i kod som kan växlas av och på på distans, är en vanlig utvecklingsprocess som mjukvaruingenjörer använder för att hjälpa till att implementera Trunk-based development och samtidigt minska risken för att introducera buggar i koden.
Eftersom Trunk-based development innebär att arbeta i en enda branch i produktionsmiljön ger feature flags ett sätt att introducera nya funktioner och ändringar i koden på ett kontrollerat sätt och gör det möjligt att snabbt stänga av dem om buggar upptäcks.
Feature flags kan också användas för att rulla ut funktioner långsamt till en liten del av ett projekts användarbas snarare än att ha en stor lansering, vilket hjälper till att begränsa skaderadien för potentiellt buggig källkod.
Trunk-based development och Optimizely Feature Experimentation
Optimizely Feature Experimentation erbjuder ett komplett utbud av utvecklarverktyg som feature flags, feature rollouts, funktionsvariabler och A/B-testning som möjliggör Trunk-based development och snabb lansering av ny kod, med minimerad risk.
Och för utvecklare som vill komma igång med bara feature flags erbjuder Optimizely gratis feature flagging obegränsad feature flagging-kapacitet i ett dussin av de mest populära språken och biblioteken.