Deployment einer dockerisierten Jenkins-CI/CD-Pipeline mit Terraform auf Oracle Cloud Infrastructure

Die schnelle Bereitstellung von Software ist für die effiziente Ausführung Ihrer Anwendungen in der Cloud wichtig. Jenkins ist ein beliebtes Produkt zur Automatisierung der CI/CD-Pipelines für kontinuierliche Integration und kontinuierliche Bereitstellung für Workloads in Oracle Cloud. Sie können Jenkins auf Oracle Cloud Infrastructure (OCI) hosten, um Ihre Build-Automatisierung zu zentralisieren und Ihr Deployment beim Wachstum Ihrer Softwareprojekte zu skalieren.

Architektur

Diese Referenzarchitektur zeigt, wie Sie mit Terraform einen containerisierten Jenkins-Controller-Agent auf einer einzelnen Oracle Linux-VM bereitstellen. Beim Deployment wird eine Oracle Linux-Compute-Instanz erstellt. Diese Instanz hostet zwei separate Docker-Container darüber: eine für den Jenkins-Controller und die andere für den Jenkins-Agent.

Die Lösung speichert auch die Controllerkonfiguration und Agent Workspaces im OCI-Blockspeicher, der an die Compute-Instanz angehängt ist. Ein separates VCN wird auf OCI erstellt, um alle Services im Deployment zu hosten.

Das folgende Diagramm veranschaulicht diese Referenzarchitektur.


Beschreibung von dock-jenkins-cicd-pipe.png folgt
Beschreibung der Abbildung dock-jenkins-cicd-pipe.png

dock-jenkins-cicd-pipe-oracle.zip

Diese Architektur enthält die folgenden Komponenten:
  • Region

    Eine Oracle Cloud Infrastructure-Region ist ein lokalisierter geografischer Bereich, der mindestens ein Data Center enthält, das als Availability-Domains bezeichnet wird. Regionen sind unabhängig von anderen Regionen, und große Entfernungen können sie voneinander trennen (innerhalb von Ländern oder sogar Kontinenten).

  • Compartment

    Compartments sind regionsübergreifende logische Partitionen in einem Oracle Cloud Infrastructure-Mandanten. In Compartments können Sie Ihre Ressourcen in Oracle Cloud organisieren, den Zugriff auf die Ressourcen kontrollieren und Nutzungs-Quotas festlegen. Um den Zugriff auf die Ressourcen in einem bestimmten Compartment zu kontrollieren, definieren Sie Policys, mit denen angegeben wird, wer auf die Ressourcen zugreifen kann und welche Aktionen sie ausführen können.

  • Availability-Domains

    Availability-Domains sind eigenständige, unabhängige Data Center innerhalb einer Region. Die physischen Ressourcen in jeder Availability-Domain sind von den Ressourcen in den anderen Availability-Domains isoliert, was eine Fehlertoleranz sicherstellt. Availability-Domains haben keine gemeinsame Infrastruktur wie Stromversorgung oder Kühlung oder das interne Availability-Domainnetzwerk. Aus diesem Grund ist es wahrscheinlich, dass ein Fehler in einer Availability-Domain sich auf die anderen Availability-Domains in der Region auswirkt.

  • Virtual Cloud Network (VCN) und Subnetze

    Ein VCN ist ein anpassbares, Software-definiertes Netzwerk, das Sie in einer Oracle Cloud Infrastructure-Region einrichten können. Wie herkömmliche Data Center-Netzwerke erhalten Sie mit VCNs vollständige Kontrolle über Ihre Netzwerkumgebung. Ein VCN kann mehrere sich nicht überschneidende CIDR-Blöcke aufweisen, die Sie nach dem Erstellen des VCN ändern können. Sie können ein VCN in Subnetze segmentieren, die sich auf eine Region oder eine Availability-Domain beschränken. Jedes Subnetz besteht aus einem Bereich zusammenhängender Adressen, die sich nicht mit anderen Subnetzen im VCN überschneiden. Sie können die Größe eines Subnetzes nach der Erstellung ändern. Ein Subnetz kann öffentlich oder privat sein.

  • Compute-Instanz

    Jenkins wird auf einer Compute-Instanz-VM bereitgestellt, wobei zwei Container ausgeführt werden: einer als Controller und ein anderer als Agent.

  • Route-Tabelle

    Virtuelle Routentabellen enthalten Regeln, mit denen Traffic von Subnetzen zu Zielen außerhalb eines VCN, normalerweise über Gateways, weitergeleitet wird.

  • Sicherheitsliste

    Für jedes Subnetz können Sie Sicherheitsregeln erstellen, die Quelle, Ziel und Typ des Traffics angeben, der in das und aus dem Subnetz zugelassen werden muss.

  • 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, in dem die Arbeitslast beim Erstellen von Projekten vom Master an mehrere Agent-Knoten delegiert wird. Eine einzelne Jenkins-Installation kann mehrere Projekte hosten oder unterschiedliche Umgebungen für Builds und Tests bereitstellen.

  • Blockspeicher

    Mit Block Storage Volumes können Sie Speicher-Volumes erstellen, anhängen, verbinden und verschieben und die Volume-Performance ändern, um Ihre Speicher-, Performance- und Anwendungsanforderungen zu erfüllen. Nachdem Sie ein Volume an eine Instanz angehängt und damit verbunden haben, können Sie es wie eine herkömmliche Festplatte verwenden. Sie können ein Volume auch trennen und an eine andere Instanz anhängen, ohne Daten zu verlieren. Damit werden die Jenkins-Controllerkonfiguration und Agent Workspaces gespeichert.

Empfehlungen

Verwenden Sie die folgenden Empfehlungen als Ausgangspunkt, wenn Sie eine containerisierte Jenkins-CI/CD-Pipeline mit Terraform auf OCI bereitstellen. Ihre Anforderungen können von der hier beschriebenen Architektur abweichen.
  • VCN

    Bestimmen Sie beim Erstellen eines VCN die Anzahl der erforderlichen CIDR-Blöcke und die Größe jedes Blocks basierend auf der Anzahl der Ressourcen, die Sie an Subnetze im VCN anhängen möchten. Verwenden Sie CIDR-Blöcke innerhalb des standardmäßigen privaten IP-Adressraums.

    Wählen Sie CIDR-Blöcke aus, die sich mit keinem anderen Netzwerk (in Oracle Cloud Infrastructure, Ihrem On-Premise-Data Center oder einem anderen Cloud-Provider) überschneiden, zu dem Sie private Verbindungen einrichten möchten.

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

    Berücksichtigen Sie bei der Entwicklung der Subnetze Ihren Verkehrsfluss und Ihre Sicherheitsanforderungen. Hängen Sie alle Ressourcen innerhalb einer bestimmten Ebene oder Rolle an dasselbe Subnetz an, das als Sicherheitsgrenze dienen kann.

    Verwenden Sie regionale Subnetze.

  • Sicherheit

    Mit Oracle Cloud Guard können Sie die Sicherheit Ihrer Ressourcen in OCI proaktiv überwachen und verwalten. Cloud Guard verwendet Detektorrezepte, die Sie definieren können, um Ihre Ressourcen auf Sicherheitsschwächen zu untersuchen und Operatoren und Benutzer auf riskante Aktivitäten zu überwachen. Wenn eine falsche Konfiguration oder unsichere Aktivität ermittelt wird, empfiehlt Cloud Guard Korrekturmaßnahmen und unterstützt das Ausführen dieser Aktionen basierend auf Responder-Rezepten, die Sie definieren können.

    Für Ressourcen, die maximale Sicherheit erfordern, empfiehlt Oracle die Verwendung von Sicherheitszonen. Eine Sicherheitszone ist ein Compartment, das mit einem von Oracle definierten Rezept für Sicherheits-Policys verknüpft ist, die auf Best Practices basieren. Beispiel: Auf die Ressourcen in einer Sicherheitszone kann nicht über das öffentliche Internet zugegriffen werden. Sie müssen mit vom Kunden verwalteten Schlüsseln verschlüsselt werden. Wenn Sie Ressourcen in einer Sicherheitszone erstellen und aktualisieren, validiert OCI die Vorgänge anhand der Policys im Rezept der Sicherheitszone und lehnt Vorgänge ab, die eine der Policys verletzen.

  • Cloud Guard

    Klonen und passen Sie die von Oracle bereitgestellten Standardrezepte an, um benutzerdefinierte Detektor- und Responder-Rezepte zu erstellen. Mit diesen Rezepten können Sie angeben, welche Art von Sicherheitsverletzungen eine Warnung generiert und welche Aktionen für sie ausgeführt werden dürfen. Beispiel: Sie möchten Object Storage-Buckets ermitteln, deren Sichtbarkeit auf "Öffentlich" gesetzt ist.

    Wenden Sie Cloud Guard auf Mandantenebene an, um den größten Geltungsbereich abzudecken und den administrativen Aufwand für die Verwaltung mehrerer Konfigurationen zu reduzieren.

    Sie können das Feature "Verwaltete Liste" auch verwenden, um bestimmte Konfigurationen auf Detektoren anzuwenden.

  • Sicherheitslisten

    Verwenden Sie Sicherheitslisten, um Ingress- und Egress-Regeln zu definieren, die für das gesamte Subnetz gelten.

Hinweise

Beachten Sie beim Deployment dieser Referenzarchitektur die folgenden Punkte.

  • Performance

    Um die beste Performance zu erzielen, stellen Sie sicher, dass die Compute-Instanz über ausreichend Cores und Arbeitsspeicher verfügt, die auf dem Build oder anderen von Jenkins ausgeführten Aufgaben basieren.

  • Sicherheit

    Verwenden Sie Policys, um einzuschränken, wer auf die OCI-Ressourcen zugreifen kann, die Ihr Unternehmen hat und wie.

  • Verfügbarkeit

    Dies ist ein minimales Design, um Sie so schnell wie möglich in Betrieb zu bringen. Für höhere Verfügbarkeit finden Sie das in der Referenzarchitektur beschriebene Deployment, Jenkins im Controller-/Agent-Modus bereitstellen, auf das Sie über das Thema "Mehr entdecken" unten zugreifen können.

  • Kostenfaktor

    Die Kosten für diese Implementierung basieren auf den Compute-Stunden für die ausgeführte VM.

Bereitstellen

Der Terraform-Code zum Deployment einer containerisierten Jenkins-CI/CD-Pipeline mit Terraform auf OCI ist in Oracle Cloud Infrastructure Resource Manager oder in GitHub verfügbar.

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

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

    2. Wählen Sie die Region aus, in der Sie den Stack bereitstellen möchten.
    3. Befolgen Sie die Anweisungen auf dem Bildschirm, um den Stack zu erstellen.
    4. Nachdem Sie den Stack erstellt haben, klicken Sie auf Terraform-Aktionen, und wählen Sie Planen aus.
    5. Warten Sie, bis der Job abgeschlossen ist, und prüfen Sie den Plan.

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

    6. Wenn keine weiteren Änderungen erforderlich sind, kehren Sie zur Seite "Stackdetails" zurück, klicken Sie auf Terraform-Aktionen, und wählen Sie Anwenden aus.
  • Mit der Terraform-CLI bereitstellen:
    1. Gehen Sie zu GitHub.
    2. Klonen Sie das Repository, oder laden Sie es auf den lokalen Rechner herunter.
    3. Befolgen Sie die Anweisungen im README-Dokument.

Mehr erfahren

Erfahren Sie mehr über das Deployment einer containerisierten Jenkins-CI/CD-Pipeline mit Terraform auf OCI.

Prüfen Sie die folgenden zusätzlichen Ressourcen:

Danksagungen

Autor: Ahmed Mansour