CI/CD-Pipeline für Cloud-Deployments einrichten

Eine schnelle Bereitstellung von Software ist wichtig, um Ihre Anwendungen effizient in der Cloud auszuführen. Jenkins ist ein beliebtes Produkt zur Automatisierung der Ccontinuous Iintegration-(CI-) und Continuous Deployment-(CD-)Pipelines für Workloads in Oracle Cloud.

Architektur

In dieser Referenzarchitektur wird Jenkins auf Oracle Cloud Infrastructure gehostet, um die Build-Automatisierung zu zentralisieren und das Deployment zu skalieren. Der kontinuierliche Integrationsprozess erstellt eine Anwendung und stellt sie mit Oracle Cloud Infrastructure Registry (OCIR) und Container Engine for Kubernetes (OKE) bereit. GitHub wird zur Verwaltung des Quellcodes verwendet.

GitHub bietet Webhook-Integration, sodass Jenkins nach jedem Code-Check-in automatisierte Builds und Tests ausführt. Eine Beispielwebanwendung wird als Teil der CI/CD-Pipeline bereitgestellt, auf die Endbenutzer aus dem Container Engine for Kubernetes-Cluster zugreifen können. Um den Prozess zu vereinfachen, wird Terraform für die Infrastrukturautomatisierung verwendet.

In dieser Referenzarchitektur nutzt Terraform ein Terraform-Modul, das Jenkins in verschiedenen Konfigurationen von einer einzelnen Jenkins-VM bis zu einer Controller-(Server-) und Agent-(Worker-)Knotenkonfiguration bereitstellen kann. Das bedeutet, dass das Jenkins-Modul in andere Architektur-Deployments für Nicht-Kubernetes-Anwendungsfälle integriert werden kann (z.B. APEX-Anwendungsentwicklung, WebLogic auf VMs usw.).

Die Agent-Konfiguration bedeutet, dass die Umgebung neu konfiguriert werden kann, um eine unterschiedliche Anzahl von Compute-Instanzen bereitzustellen, die den Workload-Anforderungen entsprechen. Dazu gehört die Möglichkeit, Agent-VMs auszutauschen, um zu vermeiden, dass Probleme beim Akkumulieren alter Abhängigkeiten, transienter Abhängigkeitskonflikte und bei der Arbeit mit nicht deklarierten Abhängigkeiten auftreten.

Die VM-Knoten, auf denen Jenkins ausgeführt wird, werden mit einem vordefinierten VM-Image konfiguriert, das mit der gesamten erforderlichen Software zur Unterstützung von Jenkins vordefiniert wurde.

Das folgende Diagramm veranschaulicht diese Referenzarchitektur.

Beschreibung von cicd-oci.png folgt
Beschreibung der Abbildung cicd-oci.png

cicd-oci-oracle.zip

Diese Architektur enthält die folgenden Komponenten:
  • Region

    Eine Oracle Cloud Infrastructure-Region ist ein lokalisierter geografischer Bereich, der mindestens ein Rechenzentrum (Availability-Domains) enthält. Regionen sind unabhängig von anderen Regionen, und große Entfernungen können sie trennen (über Länder oder sogar Kontinente).

  • Availability-Domains

    Verfügbarkeitsdomains sind eigenständige, unabhängige Rechenzentren innerhalb einer Region. Die physischen Ressourcen in jeder Availability-Domain sind von den Ressourcen in den anderen Availability-Domains isoliert, was eine Fehlertoleranz bietet. Availability-Domains teilen keine Infrastruktur wie Strom oder Kühlung oder das interne Availability-Domain-Netzwerk. Ein Fehler bei einer Availability-Domain wirkt sich daher unwahrscheinlich auf die anderen Availability-Domains in der Region aus.

  • Virtuelles Cloud-Netzwerk (VCN) und Subnetze

    Jenkins wird auf einer VM-(Virtual Machine-) Compute-Instanz ausgeführt, die in einem VCN bereitgestellt ist, das Sie in Subnetze segmentieren können. Jenkins wird im regionalen öffentlichen Subnetz A gehostet, und Container Engine for Kubernetes wird im regionalen öffentlichen Subnetz B bereitgestellt.

  • Compute-Instanz

    Jenkins wird auf einer Compute-Instanz-VM bereitgestellt. Das Container Engine for Kubernetes-Cluster führt seine Knoten auch auf Compute-Instanzen aus.

  • Container-Engine für Kubernetes

    Container Engine for Kubernetes ist ein vollständig verwalteter, skalierbarer und hochverfügbarer Service, mit dem Sie Ihre containerisierten Anwendungen in der Cloud bereitstellen können. Sie geben die Compute-Ressourcen an, die Ihre Anwendungen benötigen, und Container Engine for Kubernetes stellt sie in Oracle Cloud Infrastructure in einem vorhandenen Mandanten bereit.

  • Registrierung

    Registry ist eine von Oracleverwaltete Registry, mit der Sie die Entwicklung des Produktionsworkflows vereinfachen können. Registry erleichtert Ihnen als Entwickler das Speichern, Freigeben und Verwalten von Entwicklungsartefakten wie Docker-Images.

  • Jenkins

    Jenkins ist ein Open-Source-Automatisierungsserver, mit dem Entwickler Software zuverlässig erstellen, testen und bereitstellen können. Jenkins unterstützt den Master-/Agent-Modus, bei dem die Workload von Bauprojekten vom Master an mehrere Agent-Knoten delegiert wird. Eine einzelne Jenkins-Installation kann mehrere Projekte hosten oder verschiedene Umgebungen für Builds und Tests bereitstellen.

Empfehlungen

Ihre Anforderungen können sich von der hier beschriebenen Architektur unterscheiden. Verwenden Sie die folgenden Empfehlungen als Ausgangspunkt.

  • Compute-Formen

    Diese Architektur verwendet ein Oracle Linux-BS-Image mit der VM.Standard2.1-Form, um sowohl den Jenkins-Server als auch die Container Engine for Kubernetes-Clusterknoten zu hosten. Wenn Ihre Anwendung mehr Speicher oder Kerne benötigt, können Sie eine andere Form wählen.

  • VCN

    Legen Sie beim Erstellen eines VCN die Anzahl der erforderlichen CIDR-Blöcke und die Größe jedes Blocks basierend auf der Anzahl der Ressourcen fest, die Sie Subnetzen in VCN zuordnen möchten. Verwenden Sie CIDR-Blöcke, die sich im standardmäßigen privaten IP-Adressraum befinden.

    Nachdem Sie ein VCN erstellt haben, können Sie die CIDR-Blöcke ändern, hinzufügen und entfernen.

    Diese Architektur verwendet ein öffentliches VCN zum Hosten von Container Engine for Kubernetes. Sie können auch ein privates VCN verwenden. Verwenden Sie in diesem Fall ein NAT-Gateway, um dem Cluster Zugriff über das öffentliche Internet zu gewähren.

  • Jenkins

    Diese Architektur stellt Jenkins auf einer Compute-Instanz bereit. Mit einem Jenkins-Masterknoten wird die CI/CD-Pipeline erstellt. Wenn mehrere Pipelines parallel erstellt und ausgeführt werden sollen, können Sie mit einem Jenkins-Agent-Knoten weitere Pipelines entwickeln.

  • Container-Engine für Kubernetes

    Diese Architektur stellt das Container Engine for Kubernetes-Cluster bereit. Die Worker-Knoten werden auf einem VM.Standard2.1 Oracle Linux-Betriebssystem bereitgestellt. Diese Architektur verwendet drei Worker-Knoten im Cluster, Sie können jedoch bis zu 1000 Knoten auf jedem Cluster erstellen.

  • Registrierung

    Diese Architektur stellt Registry als private Docker-Registry zur internen Verwendung bereit. Docker-Images werden an die Registry verschoben und aus der Registry abgerufen. Sie können Registry auch als öffentliche Docker-Registry verwenden, sodass jeder Benutzer mit Internetzugriff und Kenntnissen der entsprechenden URL Bilder aus öffentlichen Repositorys in Oracle Cloud abrufen kann.

Wichtige Aspekte

  • Skalierbarkeit

    Sie können Ihre Anwendung skalieren, indem Sie je nach Belastung die Anzahl der Worker-Knoten im Container Engine for Kubernetes-Cluster aktualisieren. Sie können auch skalieren, indem Sie die Anzahl der Worker-Knoten im Cluster reduzieren. Wenn Sie einen Service im Cluster erstellen, können Sie einen Load Balancer erstellen, um Traffic auf die Knoten zu verteilen, die diesem Service zugewiesen sind. Für Jenkins können Sie mit dem Jenkins-Masterknoten weitere Agents für mehrere Pipelines erstellen.

  • Verfügbarkeit der Anwendung

    Fault-Domains bieten die beste Resilienz innerhalb einer einzelnen Availability-Domain. Sie können Compute-Instanzen bereitstellen, die dieselben Aufgaben in mehreren Availability-Domains ausführen. Dieses Design entfernt einen einzelnen Fehlerpunkt, indem Redundanz eingeführt wird.

  • Verwaltbarkeit

    Diese Architektur verwendet eine Beispiel-Webanwendung, die auf GitHub zur Quellsteuerung gehostet wird. Registry wird in der Build-Pipeline verwendet, um das Docker Build-Image für die Anwendung zu speichern.

  • Sicherheit

    Mit Policys können Sie einschränken, wer auf die Oracle Cloud Infrastructure-Ressourcen zugreifen kann, die Ihr Unternehmen hat und wie.

    Container Engine for Kubernetes ist in Oracle Cloud Infrastructure Identity and Access Management (IAM) integriert, was eine einfache Authentifizierung mit nativer Oracle Cloud Infrastructure-Identitätsfunktionalität ermöglicht.

Bereitstellen

Der Code, der für das Deployment dieser Referenzarchitektur erforderlich ist, ist in GitHub verfügbar. Sie können den Code mit einem einzigen Klick in Oracle Cloud Infrastructure Resource Manager ziehen, den Stack erstellen und bereitstellen. Alternativ können Sie den Code von GitHub auf Ihren Computer herunterladen, den Code anpassen und die Architektur mit der Terraform-CLI bereitstellen.

  • Mit Oracle Cloud Infrastructure Resource Manager bereitstellen:
    1. Klicken Sie auf In Oracle Cloud bereitstellen

      Wenn Sie sich noch nicht angemeldet haben, geben Sie die Mandanten- und Benutzerzugangsdaten ein.

    2. Lesen Sie die allgemeinen Geschäftsbedingungen, und akzeptieren Sie sie.
    3. Wählen Sie den Bereich, in dem der Stack bereitgestellt werden soll.
    4. Befolgen Sie die Prompts und Anweisungen auf dem Bildschirm, um den Stack zu erstellen.
    5. Klicken Sie nach dem Erstellen des Stacks auf Terraform-Aktionen, und wählen Sie Plan.
    6. Warten Sie, bis der Job abgeschlossen ist, und prüfen Sie den Plan.

      Um Änderungen vorzunehmen, kehren Sie zur Seite "Stackdetails" zurück, klicken auf "Stack bearbeiten" und nehmen die erforderlichen Änderungen vor. Führen Sie dann die Aktion Plan erneut aus.

    7. Wenn keine weiteren Änderungen erforderlich sind, kehren Sie zur Seite "Stackdetails" zurück, klicken auf Terraform-Aktionen, und wählen Sie Anwenden.
  • Deployment mit der Terraform-CLI:
    1. Gehen Sie zu GitHub.
    2. Laden Sie den Code herunter, oder klonen Sie ihn auf Ihren lokalen Computer.
    3. Befolgen Sie die Anweisungen in README.md.

Änderungslog

In diesem Log werden wesentliche Änderungen aufgeführt: