Een Jenkins-server uitvoeren in Azure

Azure Active Directory
Blob Storage
Key Vault
Monitor
Virtual Machines

In dit scenario worden de architectuur en overwegingen uitgelegd die u moet overwegen bij het installeren en configureren van Jenkins.

Jenkins-server die in Azure wordt uitgevoerd

Download een Visio-bestand dat dit architectuurdiagram bevat.

Deze architectuur ondersteunt herstel na nood gevallen met Azure-services, maar biedt geen ondersteuning voor geavanceerdere uitschaalscenario's waarbij meerdere voorvallen of hoge beschikbaarheid (HA) betrokken zijn, zonder uitvaltijd. Voor algemene informatie over de verschillende Azure-onderdelen, waaronder een stapsgewijze zelfstudie over het maken van een CI/CD-pijplijn in Azure, raadpleegt u Jenkins op Azure.

De focus van dit document ligt op de belangrijkste Azure-bewerkingen die nodig zijn om Jenkins te ondersteunen, waaronder het gebruik van Azure Storage om build-artefacten te onderhouden, de beveiligingsitems die nodig zijn voor SSO, andere services die kunnen worden geïntegreerd en de schaalbaarheid van de pijplijn. De architectuur is ontworpen voor gebruik met een bestaande resourcebeheerbibliotheek. Een veelvoorkomend scenario is bijvoorbeeld om Jenkins-taken te starten op basis van GitHub-doorvoeringen.

Architectuur

De architectuur bestaat uit de volgende onderdelen:

  • Resourcegroep. Een resourcegroep wordt gebruikt om Azure-assets te groeperen, zodat deze kunnen worden gesorteerd op levensduur, eigenaar en andere criteria. U kunt resourcegroepen gebruiken om Azure-assets als groep te implementeren en te bewaken en om factureringskosten per resourcegroep bij te houden. U kunt ook resources als set verwijderen, wat handig is voor testimplementaties.

  • Jenkins-server. Een virtuele machine wordt geïmplementeerd om Jenkins uit te voeren als een automatiseringsserver en fungeert als Jenkins Primary. In de sectie Jenkins installeren en configurerenziet u hoe u Jenkins installeert op een nieuwe VM.

    Notitie

    Nginx is geïnstalleerd op de VM om dienst te doen als een omgekeerde proxy voor Jenkins. U kunt Nginx configureren om SSL in te schakelen voor de Jenkins-server.

  • Virtueel netwerk. Een virtueel netwerk verbindt Azure-resources met elkaar en biedt logische isolatie. In deze architectuur wordt de Jenkins-server uitgevoerd in een virtueel netwerk.

  • Subnetten. De Jenkins-server wordt geïsoleerd in een subnet, zodat het eenvoudiger is om netwerkverkeer te beheren en scheiden, zonder de prestaties te beïnvloeden.

  • Netwerkbeveiligingsgroepen. Gebruik netwerkbeveiligingsgroepen om netwerkverkeer van internet naar het subnet van een virtueel netwerk te beperken.

  • Beheerde schijven. Een beheerde schijf is een permanente virtuele harde schijf (virtual hard drive, VHD) die gebruikt wordt voor toepassingsopslag en herstel na noodgevallen, en om de status van een Jenkins-server te bewaren. Gegevensschijven worden opgeslagen in Azure Storage. Voor de beste prestaties wordt premium-opslag aanbevolen.

  • Azure Blob Storage. De Windows Azure Storage Meer informatie over Azure Blob Storage voor het opslaan van de buildartefacten die worden gemaakt en gedeeld met andere Jenkins-builds.

  • Azure Active Directory (Azure AD). Azure AD ondersteunt gebruikersverificatie, zodat u SSO kunt instellen. Azure AD-service-principals definiëren het beleid en de machtigingen voor elke rolautorisatie in de werkstroom met behulp van op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC). Elk service-principal is gekoppeld aan een Jenkins-taak.

  • Azure Key Vault. Voor het beheren van geheimen en cryptografische sleutels die worden gebruikt voor het inrichten van Azure-resources wanneer geheimen vereist zijn, maakt deze architectuur gebruik van Azure Key Vault.

  • Bewakingsservices van Azure. Deze service bewaakt de virtuele Azure-machine die Jenkins host. Deze implementatie bewaakt de status en het CPU-gebruik van de virtuele machine en verzendt waarschuwingen.

Aanbevelingen

De volgende aanbevelingen gelden voor de meeste scenario's. Volg deze aanbevelingen tenzij er een specifieke vereiste is die iets anders voorschrijft.

Schaalbaarheidsoverwegingen

Jenkins kan dynamisch worden geschaald om workloads naar behoefte te ondersteunen. Voer voor elastische builds geen builds uit op de primaire Jenkins-server. Wijs in plaats daarvan build-taken toe aan Jenkins-agents, die naar wens elastisch in- en uitgeschaald kunnen worden. Overweeg twee opties voor het schalen van agents:

Het kost in het algemeen meer om virtuele machines te schalen dan containers. Uw build-proces moet echter worden uitgevoerd met containers om containers te gebruiken voor schalen.

Gebruik ook Azure Storage om build-artefacten te delen die in de volgende fase van de pijplijn door andere build-agents kunnen worden gebruikt.

De Jenkins-server schalen

Wanneer u een VM maakt en Jenkins installeert,kunt u de grootte van de VM opgeven. De juiste grootte van de VM-server is afhankelijk van de grootte van de verwachte werkbelasting. De Jenkins-community onderhoudt een selectiehandleiding om de configuratie te identificeren die het beste bij uw vereisten past. Azure biedt vele grootten voor virtuele Linux-machines om aan elke vereiste te voldoen. Zie de Jenkins-community met best practicesvoor meer informatie over het schalen van de Jenkins-primaire oplossing. Deze community bevat ook informatie over het schalen van Jenkins.

Beschikbaarheidsoverwegingen

Met betrekking tot een Jenkins-server betekent beschikbaarheid dat alle statusinformatie die aan uw werkstroom is gerelateerd (zoals testresultaten, bibliotheken die u hebt gemaakt of andere artefacten), kan worden hersteld. Kritieke werkstroomstatussen of artefacten moeten bewaard blijven voor het herstellen van de werkstroom als de Jenkins-server uitvalt. Overweeg twee algemene metrische gegevens als u uw beschikbaarheidsvereisten wilt beoordelen:

  • De beoogde hersteltijd (RTO) geeft aan hoe lang u zonder Jenkins door kunt gaan.

  • Het beoogd herstelpunt (RPO) geeft aan hoeveel gegevens u kunt verliezen als een onderbreking in de service Jenkins beïnvloedt.

In de praktijk impliceren RTO en RPO redundantie en back-up. Beschikbaarheid is geen kwestie van hardwareherstel , dat deel uitmaakt van Azure, maar het garanderen dat u de status van uw Jenkins-server behoudt. Microsoft biedt een service level agreement (SLA) voor afzonderlijke VM-exemplaren. Als deze SLA niet voldoet aan uw uptimevereisten, moet u ervoor zorgen dat u een plan hebt voor herstel na noodherstel of overweegt u een implementatie van een Jenkins-server met meerdere primaire servers te gebruiken (niet behandeld in dit document).

Overweeg het gebruik van de scripts voor noodherstel in stap 7 van de implementatie om een Azure Storage-account te maken met beheerde schijven om de status van de Jenkins-server op te slaan. Als Jenkins uitvalt, kunt u een herstelactie uitvoeren naar de status die in deze afzonderlijke opslagaccount is opgeslagen.

Beveiligingsoverwegingen

Gebruik de volgende methoden om beveiliging op een Jenkins-basisserver te regelen. Aangezien de server een basisserver is, is deze niet beveiligd.

  • Stel een veilige methode in voor aanmelding bij de Jenkins-server. Deze architectuur maakt gebruik van HTTP en heeft een openbaar IP-adres. HTTP biedt standaard echter geen beveiliging. Overweeg om HTTPS op de gebruikte Nginx-server in te stellen om u veilig aan te kunnen melden.

    Notitie

    Wanneer u SSL toevoegt aan uw server, maakt u een netwerkbeveiligingsgroepsregel voor het Jenkins-subnet om poort 443 te openen. Zie voor meer informatie Het openen van poorten op een virtuele machine met Azure Portal.

  • Zorg ervoor dat de Jenkins-configuratie aanvraagvervalsingen op meerdere sites voorkomt (Manage Jenkins > Configure Global Security). Deze optie is de standaardinstelling voor Microsoft Jenkins Server.

  • Configureer alleen-lezentoegang tot het Jenkins-dashboard met behulp van de invoegtoepassing Matrix Authorization Strategy Plugin.

  • Gebruik Azure RBAC om de toegang van de service-principal te beperken tot het minimum dat is vereist om de taken uit te voeren. Dit beveiligingsniveau helpt het bereik van schade door een rogue taak te beperken.

Jenkins-taken vereisen vaak geheimen voor toegang tot Azure-services waarvoor autorisatie nodig is, bijvoorbeeld Azure Container Service. Gebruik Key Vault om deze geheimen veilig te beheren. Gebruik Key Vault om referenties voor service-principals, wachtwoorden, tokens en andere geheimen op te slaan.

Gebruik Azure Security Center voor een centraal overzicht van de beveiligingsstatus van uw Azure-resources. Security Center bewaakt potentiële beveiligingsproblemen en biedt een uitgebreid overzicht van de beveiligingsstatus van uw implementatie. Security Center wordt per Azure-abonnement geconfigureerd. Schakel verzameling van beveiligingsgegevens in zoals staat omschreven in de snelstartgids voor Azure Security Center. Wanneer gegevensverzameling is ingeschakeld, scant Security Center automatisch alle virtuele machines die zijn gemaakt met dat abonnement.

De Jenkins-server heeft een eigen systeem voor gebruikersbeheer en de Jenkins-community biedt best practices voor het beveiligen van een Jenkins-exemplaar in Azure.

Beheerbaarheidsoverwegingen

Gebruik resourcegroepen om geïmplementeerde Azure-resources te organiseren. Implementeer productieomgevingen en ontwikkelings-/testomgevingen in afzonderlijke resourcegroepen, zodat u de resources van elke omgeving kunt bewaken en factureringskosten per resourcegroep kunt verzamelen. U kunt ook resources als set verwijderen, wat handig is voor testimplementaties.

Azure biedt verschillende functies voor controle en diagnostische gegevens van de algehele infrastructuur. Deze architectuur implementeert Azure Monitor om het CPU-gebruik te bewaken. U kunt bijvoorbeeld Azure Monitor gebruiken om het CPU-gebruik te bewaken en een melding te verzenden wanneer het CPU-gebruik hoger is dan 80 procent. (Hoog CPU-gebruik geeft aan dat u de Jenkins-server-VM mogelijk wilt opschalen.) U kunt een aangewezen gebruiker ook waarschuwen als de VM uitvalt of niet meer beschikbaar is.

Community's

De volgende online community's kunnen vragen beantwoorden en u helpen bij het configureren van een geslaagde implementatie:

Jenkins installeren en configureren

Volg de instructies in het artikel Quickstart: Jenkinsconfigureren met behulp van Azure CLI om een VM te maken en Jenkins te installeren.

Volgende stappen