Ausführen eines Jenkins-Servers in Azure

Azure Active Directory
Blob Storage
Key Vault
Monitor
Virtual Machines

In diesem Szenario werden die Architektur und Überlegungen erläutert, die beim Installieren und Konfigurieren von Jenkins berücksichtigt werden müssen.

Jenkins server running on Azure

Greifen Sie über Microsoft 365 online auf das Visio-Diagramm zu. Beachten Sie, dass Sie über eine Visio Lizenz verfügen müssen, um auf dieses Diagramm zugreifen zu können. Oder Laden Sie eine Visio-Datei herunter, die eine Version dieses Architekturdiagramm enthält.

Diese Architektur unterstützt die Notfallwiederherstellung mit Azure-Diensten, deckt jedoch keine komplexeren Szenarien mit horizontaler Skalierung und mehreren primären Regionen oder Hochverfügbarkeit (High Availability, HA) ohne Downtime ab. Allgemeine Informationen zu den verschiedenen Azure-Komponenten, etwa ein ausführliches Tutorial zum Erstellen einer CI/CD-Pipeline in Azure, finden Sie unter Jenkins in Azure.

Der Schwerpunkt dieses Dokuments liegt auf den zentralen Azure-Vorgängen, die zur Unterstützung von Jenkins erforderlich sind. Dazu zählen die Verwendung von Azure Storage zum Speichern von Buildartefakten, die für SSO erforderlichen Sicherheitselemente, andere integrierbare Dienste und Skalierbarkeit für die Pipeline. Die Architektur ist so konzipiert, dass sie mit einem vorhandenen Quellcodeverwaltungs-Repository verwendet werden kann. Ein allgemeines Szenario ist beispielsweise das Starten von Jenkins-Aufträgen auf der Grundlage von GitHub-Commits.

Aufbau

Die Architektur umfasst die folgenden Komponenten:

  • Ressourcengruppe Eine Ressourcengruppe dient zum Gruppieren von Azure-Ressourcen, damit sie nach Lebensdauer, Besitzer und anderen Kriterien verwaltet werden können. Verwenden Sie Ressourcengruppen, um Azure-Ressourcen als Gruppe bereitzustellen und zu überwachen und Abrechnungskosten nach Ressourcengruppe nachzuverfolgen. Sie können auch Ressourcen als Gruppe löschen. Dies ist für Testbereitstellungen nützlich.

  • Jenkins-Server: Ein virtueller Computer, der als primärer Jenkins-Server fungiert, wird bereitgestellt, um Jenkins als Automatisierungsserver auszuführen. Im Abschnitt zum Installieren und Konfigurieren von Jenkins erfahren Sie, wie Sie Jenkins auf einem neuen virtuellen Computer installieren.

    Hinweis

    Nginx ist auf dem virtuellen Computer installiert und fungiert als Reverseproxy für Jenkins. Sie können Nginx zum Aktivieren von SSL für den Jenkins-Server konfigurieren.

  • Virtuelles Netzwerk: Ein virtuelles Netzwerk verknüpft Azure-Ressourcen und bietet eine logische Isolierung. In dieser Architektur wird der Jenkins-Server in einem virtuellen Netzwerk ausgeführt.

  • Subnetze: Der Jenkins-Server ist in einem Subnetz isoliert, um die Verwaltung und Aufteilung des Netzwerkdatenverkehrs zu vereinfachen, ohne die Leistung zu beeinträchtigen.

  • Netzwerksicherheitsgruppen: Verwenden Sie Netzwerksicherheitsgruppen, um Netzwerkdatenverkehr vom Internet auf ein Subnetz eines virtuellen Netzwerks zu beschränken.

  • Verwaltete Datenträger Ein verwalteter Datenträger ist eine persistente virtuelle Festplatte (Virtual Hard Disk, VHD), die als Anwendungsspeicher sowie zum Speichern des Zustands des Jenkins-Servers und Bereitstellen der Notfallwiederherstellung verwendet wird. Datenträger werden in Azure Storage gespeichert. Für eine hohe Leistung wird Storage Premium empfohlen.

  • Azure Blob-Speicher. Windows Azure Storage – Erfahren Sie, wie Sie Azure Blob Storage zum Speichern der Buildartefakte nutzen, die erstellt und für andere Jenkins-Builds freigegeben werden.

  • Azure Active Directory (Azure AD).Azure AD unterstützt die Benutzerauthentifizierung, sodass Sie SSO einrichten können. Azure AD-Dienstprinzipale definieren die Richtlinie und Berechtigungen für jede Rollenauthentifizierung im Workflow unter Verwendung der rollenbasierten Zugriffssteuerung in Azure (Azure Role-Based Access Control, Azure RBAC). Jeder Dienstprinzipal ist einem Jenkins-Auftrag zugeordnet.

  • Azure Key Vault: Diese Architektur verwendet Azure Key Vault zum Verwalten von Geheimnissen und kryptografischen Schlüsseln, die zum Bereitstellen von Azure-Ressourcen verwendet werden, wenn Geheimnisse erforderlich sind.

  • Azure-Überwachungsdienste: Dieser Dienst überwacht den virtuellen Azure-Computer, auf dem Jenkins gehostet wird. Bei dieser Bereitstellung werden der Status des virtuellen Computers und die CPU-Auslastung überwacht und Warnungen gesendet.

Empfehlungen

Die folgenden Empfehlungen gelten für die meisten Szenarios. Sofern Sie keine besonderen Anforderungen haben, die Vorrang haben, sollten Sie diese Empfehlungen befolgen.

Überlegungen zur Skalierbarkeit

Jenkins kann bei Bedarf zur Unterstützung von Workloads dynamisch skaliert werden. Führen Sie bei elastischen Builds keine Builds auf dem primären Jenkins-Server aus. Lagern Sie stattdessen Buildtasks auf Jenkins-Agents aus, da diese elastisch horizontal herunter- und hochskaliert werden können. Erwägen Sie zwei Optionen für die Skalierung von Agents:

Das Skalieren virtueller Computer ist im Allgemeinen teurer als das Skalieren von Containern. Damit Sie Container für die Skalierung verwenden können, muss Ihr Buildprozess jedoch mit Containern ausgeführt werden.

Verwenden Sie darüber hinaus Azure Storage für die Freigabe von Buildartefakten, die unter Umständen in der nächsten Phase der Pipeline von anderen Build-Agents verwendet werden.

Skalieren des Jenkins-Servers

Wenn Sie einen virtuellen Computer erstellen und Jenkins installieren, können Sie die Größe des virtuellen Computers angeben. Die Auswahl der richtigen VM-Servergröße hängt von der Größe der erwarteten Workload ab. Die Jenkins-Community stellt einen Leitfaden für die Auswahl bereit, anhand dessen Sie die Konfiguration ermitteln können, die Ihre Anforderungen am besten erfüllt. Azure bietet zahlreiche Größen für virtuelle Linux-Computer, um verschiedenste Anforderungen zu erfüllen. Weitere Informationen zum Skalieren des primären Jenkins-Servers finden Sie in den Best Practices der Jenkins-Community. Dort finden Sie außerdem Einzelheiten zum Skalieren von Jenkins.

Überlegungen zur Verfügbarkeit

Verfügbarkeit im Kontext eines Jenkins-Servers bedeutet Folgendes: Sie können jegliche Zustandsinformationen im Zusammenhang mit Ihrem Workflow (etwa Testergebnisse, von Ihnen erstellte Bibliotheken oder andere Artefakte) wiederherstellen. Entscheidende Workflowzustände oder Artefakte müssen zur Wiederherstellung des Workflows beibehalten werden, falls der Jenkins-Server ausfällt. Berücksichtigen Sie beim Bewerten der Verfügbarkeitsanforderungen zwei allgemeine Metriken:

  • RTO (Recovery Time Objective) gibt an, wie lange Sie Vorgänge ohne Jenkins ausführen können.

  • RPO (Recovery Point Objective) gibt an, wie viele Daten verloren gehen dürfen, wenn sich eine Dienstunterbrechung auf Jenkins auswirkt.

In der Praxis geben RTO und RPO Redundanz und Sicherung an. Bei Verfügbarkeit geht es nicht um die Hardwarewiederherstellung (die Bestandteil von Azure ist), sondern vielmehr darum, den Zustands des Jenkins-Servers aufrechtzuerhalten. Microsoft bietet eine Vereinbarung zum Servicelevel (Service Level Agreement, SLA) für einzelne VM-Instanzen an. Falls diese SLA Ihre Verfügbarkeitsanforderungen nicht erfüllt, stellen Sie sicher, dass Sie einen Tarif für die Notfallwiederherstellung besitzen, oder ziehen Sie die Bereitstellung eines Jenkins-Multiprimärservers (nicht in diesem Dokument behandelt) in Betracht.

Erwägen Sie die Verwendung der Skripts für die Notfallwiederherstellung in Schritt 7 der Bereitstellung, um ein Azure Storage-Konto mit verwalteten Datenträgern zum Speichern des Jenkins-Serverzustands zu erstellen. Wenn Jenkins ausfällt, kann der Systemzustand wiederhergestellt werden, der in diesem separaten Speicherkonto gespeichert ist.

Sicherheitshinweise

Verwenden Sie zum Schutz eines grundlegenden Jenkins-Servers die folgenden Vorgehensweisen, da ein Jenkins-Server in seinem Grundzustand nicht sicher ist.

  • Richten Sie eine sichere Methode für die Anmeldung beim Jenkins-Server ein. Diese Architektur verwendet HTTP und besitzt eine öffentliche IP, HTTP ist jedoch nicht standardmäßig sicher. Ziehen Sie die Einrichtung von HTTPS auf dem Nginx-Server in Betracht, der für die sichere Anmeldung verwendet wird.

    Hinweis

    Wenn Sie Ihrem Server SSL hinzufügen, erstellen Sie eine Netzwerksicherheitsgruppen-Regel für das Jenkins-Subnetz, damit Port 443 geöffnet wird. Weitere Informationen finden Sie unter Öffnen von Ports zu einem virtuellen Computer mit dem Azure-Portal.

  • Stellen Sie sicher, dass die Jenkins-Konfiguration die websiteübergreifende Anforderungsfälschung verhindert (Manage Jenkins > Configure Global Security (Jenkins verwalten > Globale Sicherheit konfigurieren)). Diese ist die Standardoption für einen Microsoft-Jenkins-Server.

  • Konfigurieren Sie den schreibgeschützten Zugriff auf das Jenkins-Dashboard mithilfe des Plug-Ins für die Matrixautorisierungsstrategie.

  • Verwenden Sie die Azure RBAC, um den Zugriff des Dienstprinzipals auf die Mindestanforderungen für die Auftragsausführung zu beschränken. Diese Sicherheitsstufe dient zur Begrenzung des Schadens, der durch einen nicht autorisierten Auftrag entstehen kann.

Jenkins-Aufträge benötigen häufig Geheimnisse für den Zugriff auf Azure-Dienste, für die eine Autorisierung erforderlich ist, etwa Azure Container Service. Verwenden Sie Key Vault, um diese Geheimnisse auf sichere Weise zu verwalten. Speichern Sie mithilfe von Key Vault Dienstprinzipal-Anmeldeinformationen, Kennwörter, Token und andere Geheimnisse.

In Microsoft Defender for Cloud können Sie den Sicherheitsstatus Ihrer Azure-Ressourcen in einer zentralen Ansicht sehen. Mit Defender for Cloud werden potenzielle Sicherheitsprobleme überwacht, und Sie erhalten eine umfassende Darstellung des Sicherheitszustands Ihrer Bereitstellung. Defender for Cloud wird pro Azure-Abonnement konfiguriert. Aktivieren Sie die Sammlung von Sicherheitsdaten wie im Schnellstarthandbuch zu Microsoft Defender for Cloud beschrieben. Nachdem die Datensammlung aktiviert wurde, durchsucht Defender for Cloud VMs automatisch, die unter diesem Abonnement erstellt werden.

Der Jenkins-Server verfügt über ein eigenes Benutzerverwaltungssystem, und die Jenkins-Community stellt Best Practices zum Sichern einer Jenkins-Instanz in Azure zur Verfügung.

Überlegungen zur Verwaltbarkeit

Verwenden Sie Ressourcengruppen, um die bereitgestellten Azure-Ressourcen zu organisieren. Stellen Sie Produktionsumgebungen und Entwicklungs-/Testumgebungen in separaten Ressourcengruppen bereit, sodass Sie die Ressourcen der einzelnen Umgebungen überwachen und Abrechnungskosten nach Ressourcengruppe zusammenfassen können. Sie können auch Ressourcen als Gruppe löschen. Dies ist für Testbereitstellungen nützlich.

In Azure sind mehrere Features für die Überwachung und Diagnose der Gesamtstruktur enthalten. Zur Überwachung der CPU-Auslastung wird in dieser Architektur Azure Monitor bereitgestellt. Sie können beispielsweise mithilfe von Azure Monitor die CPU-Auslastung überwachen und eine Benachrichtigung senden, wenn die CPU-Auslastung 80 Prozent überschreitet. (Eine hohe CPU-Auslastung weist darauf hin, dass Sie unter Umständen den virtuellen Computer mit dem Jenkins-Server hochskalieren sollten.) Sie können auch einen angegebenen Benutzer benachrichtigen, wenn der virtuelle Computer ausfällt oder nicht mehr verfügbar ist.

Communitys

Die folgenden Onlinecommunitys können Fragen beantworten und Sie beim Konfigurieren einer erfolgreichen Bereitstellung unterstützen:

Jenkins installieren und konfigurieren können

Um einen virtuellen Computer zu erstellen und Jenkins zu installieren, befolgen Sie die Anweisungen im Artikel Schnellstart: Konfigurieren von Jenkins über die Azure-Befehlszeilenschnittstelle.

Nächste Schritte