I det här scenariot beskrivs arkitekturen och övervägandena som du bör tänka på när du installerar och konfigurerar Jenkins.

Ladda ned en Visio-fil som innehåller det här arkitekturdiagrammet.
Den här arkitekturen stöder haveriberedskap med Azure-tjänster, men omfattar inte mer avancerade utskalningsscenarier som omfattar flera primära försök eller hög tillgänglighet (HA) utan driftstopp. Allmän information om de olika Azure-komponenterna, till exempel en stegvis självstudie om att bygga ut en CI/CD-pipeline på Azure, finns i Jenkins på Azure.
Det här dokumentet fokuserar på viktigaste Azure-åtgärderna som krävs för att stödja Jenkins, till exempel användning av Azure Storage för underhåll av byggartefakter, säkerhetsobjekt som krävs för SSO, andra tjänster som kan integreras och skalbarhet för pipeline. Arkitekturen är utformad att fungera med ett befintligt centrallager med källkontroll. Ett vanligt scenario är till exempel att starta Jenkins-jobb baserat på GitHub-incheckningar.
Arkitektur
Arkitekturen består av följande komponenter:
Resursgrupp. En resursgrupp används för att gruppera Azure-tillgångar så att de kan hanteras efter livslängd, ägare och andra kriterier. Använd resursgrupper till att distribuera och övervaka Azure-tillgångar som en grupp och spåra faktureringskostnader efter resursgrupp. Du kan också ta bort resurser som en uppsättning, vilket är användbart för testdistributioner.
Jenkins-server. En virtuell dator distribueras för att köra Jenkins som en automationsserver och fungerar som Jenkins Primary. I avsnittet Installera och konfigurera Jenkinsser du hur du installerar Jenkins på en ny virtuell dator.
Anteckning
Nginx är installerat på den virtuella dator för att fungera som en omvänd proxy till Jenkins. Du kan konfigurera Nginx för att aktivera SSL för Jenkins-servern.
Virtuellt nätverk. Ett virtuellt nätverk ansluter Azure-resurser till varandra och ger logisk isolering. I den här arkitekturen körs Jenkins-servern i ett virtuellt nätverk.
Undernät. Jenkins-servern isoleras i ett undernät för att gör det lättare att hantera och särskilja nätverkstrafik utan att påverka prestanda.
Nätverkssäkerhetsgrupper. Använd nätverkssäkerhetsgrupper för att begränsa nätverkstrafiken från Internet till undernätet i ett virtuellt nätverk.
Hanterade diskar. En hanterade disk är en permanent virtuell hårddisk (VHD) som används för programlagring och även för att underhålla tillståndet för Jenkins-servern och ge haveriberedskap. Datadiskar lagras i Azure Storage. För höga prestanda rekommenderas Premium Storage.
Azure Blob Storage. I Windows Azure Storage lär du dig hur du använder Azure Blob Storage för att lagra de byggartefakter som skapas och delas med andra Jenkins-byggen.
Azure Active Directory (Azure AD).Azure AD stöder användarautentisering så att du kan konfigurera enkel inloggning. Azure AD-tjänstens huvudnamn definierar principen och behörigheterna för varje rollauktorisering i arbetsflödet med hjälp av rollbaserad åtkomstkontroll i Azure (Azure RBAC). Varje tjänsthuvudnamn är associerat med ett Jenkins-jobb.
Azure Key Vault. För att hantera hemligheter och kryptografiska nycklar som används för att etablera Azure-resurser när hemligheter krävs använder den här arkitekturen Azure Key Vault.
Azure-övervakningstjänster. Den här tjänsten övervakar den virtuella Azure-dator som är värd för Jenkins. Den här distributionen övervakar den virtuella datorns status och CPU-användning och skickar aviseringar.
Rekommendationer
Följande rekommendationer gäller för de flesta scenarier. Följ dessa rekommendationer om du inte har ett visst krav som åsidosätter dem.
Skalbarhetsöverväganden
Jenkins kan dynamiskt skalas för att stödja arbetsbelastningar efter behov. För elastiska byggen ska du inte köra byggen på den primära Jenkins-servern. Omfördela istället bygguppgifter till Jenkins-agenter, som kan skalas in och ut elastiskt efter behov. Överväg två alternativ för att skala agenter:
Skala Jenkins-distributioner med Azure VM-agenter. VM-agenter möjliggör elastisk utskalning för agenter och kan använda olika typer av virtuella datorer. Du kan ange en annan basavbildning från Azure Marketplace eller använda en anpassad avbildning. Se Architecting for Scale (Utformning för skala) i Jenkins-dokumentationen.
Kör en container som en agent i antingen Azure Container Service med Kuberneteseller Azure Container Instances.
Virtuella datorer kostar allmänt mer att skala än containrar. Men om du vill använda containrar för skalning måste byggprocessen köras med containrar.
Använd även Azure Storage för att dela byggartefakter som kan användas i nästa steg för pipeline av andra byggagenter.
Skalning av Jenkins-servern
När du skapar en virtuell dator och installerar Jenkinskan du ange storleken på den virtuella datorn. Vilken VM-serverstorlek som är rätt beror på storleken på den förväntade arbetsbelastningen. Jenkins-communityn har en urvalsguide för att hjälpa till att identifiera konfigurationen som bäst uppfyller dina krav. Azure har många storlekar för virtuella Linux-datorer för att uppfylla alla krav. Mer information om hur du skalar den primära Jenkins finns i Jenkins-communityn med metodtips, som även innehåller information om skalning av Jenkins.
Överväganden för tillgänglighet
Tillgänglighet för en Jenkins-server innebär att det går att återställa all tillståndsinformation som hör till arbetsflödet, till exempel testresultat, bibliotek som du har skapat, eller andra artefakter. Arbetsflöden eller artefakter i kritiskt tillstånd måste underhållas för att det ska gå att återställa arbetsflödet om Jenkins-servern kraschar. Överväg två vanliga mått vid utvärdering av tillgänglighetskraven:
Mål för återställningstid (RTO)anger hur lång tid det kan gå utan Jenkins.
Mål för återställningspunkt (RPO) anger hur mycket data du har råd att förlora om en störning i tjänsten påverkar Jenkins.
I praktiken innebär RTO och RPO redundans och säkerhetskopiering. Tillgänglighet handlar inte om maskinvaruåterställning – som är en del av Azure – utan snarare om att se till att du behåller jenkins-serverns tillstånd. Microsoft erbjuder ett serviceavtal (SLA) för enskilda VM-instanser. Om detta serviceavtal inte uppfyller dina drifttidskrav kontrollerar du att du har en plan för haveriberedskap eller överväger att använda en distribution med flera primära Jenkins-servrar (omfattas inte i det här dokumentet).
Du kan använda programåterställningsskripten i steg 7 av distributionen för att skapa ett Azure Storage-konto med hanterade diskar för att lagra Jenkins-servertillståndet. Om Jenkins slutar fungera kan den återställas till det tillstånd som lagras på det här separata lagringskonto.
Säkerhetsöverväganden
Använd följande metoder för att låsa säkerheten på en grundläggande Jenkins-server, eftersom den inte är säker i grundläggande tillstånd.
Skapa ett säkert sätt att logga in på Jenkins-servern. Den här arkitekturen använder HTTP och har en offentlig IP-adress, men HTTP är inte säkert som standard. Du bör konfigurera HTTPS på Nginx-servern som används för säker inloggning.
Anteckning
När du lägger till SSL på servern skapar du en regel för nätverkssäkerhetsgrupp för Jenkins-undernätet för att öppna port 443. Ner information finns i artikeln om hur du öppnar portar för en virtuell dator med Azure Portal.
Kontrollera att Jenkins-konfigurationen förhindrar förfalskning av begäranden mellan webbplatser (Hantera Jenkins > Konfigurera global säkerhet). Det här alternativet är standardinställningen för Microsoft Jenkins Server.
Konfigurera skrivskyddad åtkomst till Jenkins-instrument genom att använda plugin-programmet Matrix Authorization Strategy.
Använd Azure RBAC för att begränsa åtkomsten för tjänstens huvudnamn till det minimum som krävs för att köra jobben. Den här säkerhetsnivån hjälper till att begränsa omfattningen av skador från ett falskt jobb.
Jenkins-jobb kräver ofta hemligheter för åtkomst till Azure-tjänster som kräver auktorisering, till exempel Azure Container Service. Använd Key Vault att hantera dessa hemligheter på ett säkert sätt. Använd Key Vault till att lagra tjänsthuvudnamn, lösenord, token och andra hemligheter.
Om du vill få en central vy över säkerhetstillståndet för dina Azure-resurser använder du Microsoft Defender för molnet. Defender for Cloud övervakar potentiella säkerhetsproblem och ger en heltäckande bild av säkerhetshälsan för din distribution. Defender for Cloud konfigureras per Azure-prenumeration. Aktivera insamling av säkerhetsdata enligt beskrivningen i snabbstartsguiden för Microsoft Defender for Cloud. När datainsamling har aktiverats genomsöker Defender for Cloud automatiskt alla virtuella datorer som skapats under prenumerationen.
Jenkins-servern har ett eget hanteringssystem och Jenkins-communityn ger metodtips för att skydda en Jenkins-instans på Azure.
Överväganden för hantering
Använd resursgrupper till att organisera de Azure-resurser som har distribuerats. Distribuera produktionsmiljöer och utvecklings-/testmiljöer i separata resursgrupper, så att du kan övervaka varje miljös resurser och samla in faktureringskostnader per resursgrupp. Du kan också ta bort resurser som en uppsättning, vilket är användbart för testdistributioner.
Azure har flera funktioner för övervakning och diagnostik för den totala infrastrukturen. Den här arkitekturen använder Azure Monitor för övervakning av CPU-användning. Du kan till exempel använda Azure Monitor till att övervaka CPU-användning och skicka en avisering om CPU-användningen överskrider 80 procent. (Hög CPU-användning indikerar att du kanske vill skala upp Jenkins-serverns virtuella dator.) Du kan även meddela en utsedd användare om den virtuella datorn blir otillgänglig.
Communities
Följande onlinegrupper kan besvara frågor och hjälpa dig att konfigurera en lyckad distribution:
Installera och konfigurera Jenkins
Om du vill skapa en virtuell dator och installera Jenkins följer du anvisningarna i artikeln Snabbstart: Konfigurera Jenkins med Azure CLI.