Versionsutveckling: Programutveckling
Ett av de främsta målen med att införa moderna strategier för versionshantering är att skapa system som gör det möjligt för dina team att omvandla idéer till produktion levererad programvara med så lite friktion som möjligt. I det här avsnittet av Well-Architected Framework granskas metoder och verktyg för att snabbt och tillförlitligt leverera programvara. Du får lära dig om saker som kontinuerlig distribution, integreringsstrategier och distributionsmiljöer. Exempel tillhandahålls som hjälper dig att snabbt komma igång med den här tekniken.
Versionsframställning börjar dock inte med tjusig distributionsprogramvara, flera distributionsmiljöer eller Kubernetes-kluster. Innan vi undersöker hur vi snabbt och tillförlitligt kan släppa programvara måste vi först titta på hur programvara utvecklas.
Introduktionen av molnbaserad databehandling har inte bara haft en betydande inverkan på hur programvara levereras och körs, utan har också haft en enorm nedströms inverkan på hur programvara utvecklas. Introduktionen av containerteknik har till exempel ändrat hur vi kan vara värd för, skala och föråldra programvara. Med detta sagt har containrar också påverkat saker som beroendehantering, värdmiljö och verktyg när vi utvecklar programvara.
Den här artikeln beskriver många metoder som du kanske vill överväga när du skapar strategier för att utveckla för molnet. Ämnena omfattar:
- Utvecklingsmiljöer eller där du skriver din kod.
- Källkontroll och förgreningsstrategier, hur du hanterar, samarbetar med och slutligen distribuerar din kod.
Utvecklingsmiljöer
När du utvecklar programvara för molnet eller någon miljö måste du vara noga med att se till att utvecklingsmiljön har konfigurerats för framgång. När du konfigurerar en utvecklingsmiljö kan du överväga frågor som följande:
- Hur gör jag för att se till att alla beroenden är på plats?
- Hur konfigurerar jag bäst min utvecklingsmiljö för att emulera en produktionsmiljö?
- Hur gör jag för att utveckla kod där tjänstberoenden kan finnas med kod som redan finns i produktion?
Baserat på den valda distributionsmetoden och målprogrammet kan svaren på dessa frågor och de verktyg som används för det som ofta kallas "inner-loop"-utvecklingsprocessen skilja sig åt.
Pakethanteringslösningar kan till exempel hjälpa dig att hantera beroenden i utvecklingsmiljön. När du använder containrar kanske du vill använda en lösning som Docker Desktop för din utvecklingsmiljö i stället. När det gäller att effektivt emulera en produktionsmiljö kan du välja att konfigurera ett antal dummy-tjänster lokalt.
Vissa Linux-verktyg är en praktisk lösning på detta, och de är nu även tillgängliga på Windows datorer. Du kan använda dem genom att konfigurera Windows-undersystem för Linux.
Slutligen kan du med verktyg som Bridge for Kubernetes felsöka kod i utvecklingsmiljön när du är ansluten till ett Kubernetes-kluster. Den här konfigurationen kan vara användbar när du arbetar med containerbaserade mikrotjänster. Du kan arbeta med en tjänst lokalt medan tjänster som du är beroende av skickas via fjärranslutning.
Exempel på utvecklingsverktyg för "inner-loop"
Ett utvecklingsteam kan välja vissa delar av programvaran nedan när de utvecklar ett containerbaserat program med ett Kubernetes-kluster som distributionsmål.
- Azure Artifacts är en pakethanteringslösning som gör att du kan vara värd för privata paket och tillhandahålla överordnad anslutning till offentliga paketlagringsplatser för en mängd olika pakethanteringssystem, till exempel NuGet.
- Docker Desktop är ett program som tillhandahåller en Docker-miljö i ditt utvecklingssystem. Docker Desktop innehåller inte bara Docker-körningen utan även programutvecklingsverktyg och lokal Kubernetes-miljö.
- Windows-undersystem för Linux tillhandahåller en Linux-miljö på dina Windows-datorer, inklusive många kommandoradsverktyg, verktyg och Linux-program.
- Med Bridge to Kubernetes kan du köra och felsöka kod i ditt utvecklingssystem när du är ansluten till ett Kubernetes-kluster. Den här konfigurationen kan vara användbar när du arbetar med arkitekturer av mikrotjänsttyp.
- Podman är ett verktyg med öppen källkod för att arbeta med containrar.
Källkontroll
System för källkontrollhantering (SCM) är ett sätt att kontrollera, samarbeta och peer-granska programvaruändringar. När programvara slås samman med källkontroll hjälper systemet till att hantera kodkonflikter. I slutändan ger källkontrollen en körningshistorik över programvaran, ändringar och deltagare. Oavsett om en programvara är öppen källkod eller privat har användning av källkontrollprogramvara blivit en standardiserad metod för att hantera programvaruutveckling.
Eftersom molnmetoder används och eftersom så mycket av molninfrastrukturen hanteras via kod är versionskontrollsystem en integrerad del av infrastrukturhanteringen.
Många källkontrollsystem drivs av Git. Git är ett distribuerat versionskontrollsystem med relaterade verktyg som gör att du och ditt team kan spåra ändringar i källkoden under programutvecklingens livscykel. Med Git kan du skapa en kopia av programvaran, göra ändringar, föreslå ändringarna och få peer-granskning av ditt förslag. Modern programvara för källkontroll förenklar den här peer-granskningsprocessen och hjälper dig att se de exakta ändringar som en deltagare vill göra.
När de föreslagna ändringarna har godkänts hjälper Git till att sammanfoga ändringarna till källan, inklusive konfliktlösning. Om ändringarna vid något tillfälle måste återställas kan Git också hantera återställning.
Versionskontroll och kodändringar
Förutom att tillhandahålla en plats där vi kan lagra kod kan vi med källkontrollsystem förstå vilken version av programvaran som är aktuell och identifiera ändringar mellan de nuvarande och tidigare versionerna. Lösningar för versionskontroll bör också vara en metod för att återgå till den tidigare versionen när det behövs.
Följande bild visar hur Git och GitHub används för att se de föreslagna kodändringarna.
Grenar, förgreningar och pull-begäranden
Med hjälp av källkontrollsystem kan du skapa båda grenarna på en befintlig lagringsplats och dina egna kopior av programvaran. En kopia av en befintlig lagringsplats kallas för en "förgrening".
Även om grenar vanligtvis är kortlivade och så småningom sammanfogas tillbaka till en lagringsplats via en pull-begäran, finns det förgreningar vanligtvis längre. Även om de också kan slås samman via en pull-begäran, utvecklas vissa gafflarna oberoende av deras ursprungsrepo.
Du kan läsa vår dokumentation om förgreningar och grenar om du vill veta mer om skillnaderna och likheterna mellan dem.
Peer-granskning
När uppdateringar görs av programvaru- och infrastrukturkonfigurationer gör versionskontrollprogramvaran det möjligt för oss att föreslå dessa ändringar innan vi sammanfogar dem till källan. Under förslaget kan peer-datorer granska ändringarna, rekommendera uppdateringar och godkänna ändringarna. Källkontrolllösningar är en utmärkt plattform för samarbete om ändringar i programvaran.
Mer information om hur du använder Git finns i DevOps Resource Center.
GitHub
GitHub är ett populärt källkontrollsystem som använder Git. Förutom grundläggande Git-funktioner innehåller GitHub flera andra funktioner som åtkomstkontroll, samarbetsfunktioner som kodproblem, projekttavlor, wiki-filer och en automatiseringsplattform som kallas GitHub åtgärder.
Azure-lagringsplatser
Azure DevOps är en samling tjänster för att skapa, samarbeta med, testa och leverera programvara till alla miljöer. Azure DevOps Services innehåller Azure Repos, som är dess källkontrollsystem. Användning av Azure-lagringsplatser innehåller obegränsade kostnadsfria privata Git-lagringsplatser. Standard Git driver Azure-lagringsplatser och du kan använda valfria klienter och verktyg för att arbeta med dem.