Konfigurieren der CI Pipeline
In Codesphere ist die CI Pipeline das zentrale Infrastructure-as-Code (IaC)-Rezept, das definiert, wie eine Landscape aufgebaut und deployt wird.
Dieser Leitfaden führt durch das Erstellen und Konfigurieren der Pipeline mithilfe der ci.yml-Datei.
Was ist die ci.yml?
Die ci.yml bietet ein standardisiertes Format zur Definition der Landscape. Sie dient als deklarative Konfiguration, die festlegt, wie das Service Mesh zusammengesetzt ist, welche Ressourcen jeder Service benötigt und wie sie orchestriert werden.
Die Datei besteht aus zwei Hauptabschnitten:
- prepare: Definiert die Runtime-Umgebung, installiert Abhängigkeiten und baut die Anwendung. Diese Stage bereitet das persistente, gemeinsam genutzte Dateisystem vor.
- run: Definiert die Deployment-Artefakte (Services), deren Rechenressourcen und deren Runtime-Konfiguration (Ports, Health Checks und Umgebungsvariablen).
Was ist ein CI Profile?
info
Ein CI Profile ist eine eigenständige Variante der ci.yml-Konfiguration. Beim Erstellen eines neuen Profils generiert Codesphere eine entsprechende Konfigurationsdatei im Projektstammverzeichnis (z. B. ci.dev.yml, ci.prod.yml).
Dies ermöglicht die Anpassung bestimmter Verhaltensweisen für unterschiedliche Umgebungen:
- Build Steps: Ausführen bestimmter Tests oder Build-Skripte für unterschiedliche Stages.
- Run Commands: Starten der Anwendung mit unterschiedlichen Flags (z. B.
--debugvs.--prod). - Services: Starten unterschiedlicher Services & Runtimes (z. B. ein dedizierter Redis für Prod vs. ein gemeinsam genutzter für Dev).
Mehr zu CI Profiles erfahren
Auswählen eines CI Profile
Vor der Definition der Schritte muss festgelegt werden, welches Profile bearbeitet wird. CI Profiles ermöglichen unterschiedliche Konfigurationen für unterschiedliche Umgebungen (z. B. Development vs. Production) innerhalb desselben Projekts.
- Zum Landscape Config Editor in der Seitenleiste navigieren.
- Das CI Profile-Dropdown-Menü oben im Editor finden.
- Ein Profile auswählen: Ein vorhandenes Profile (z. B.
Default,devoderprod) zur Bearbeitung auswählen.
hinweis
Alle im Editor vorgenommenen Änderungen (Hinzufügen von Schritten, Ändern von Ressourcen) gelten nur für das aktuell ausgewählte CI Profile.
Definieren der Schritte
info
Die Pipeline kann über die visuelle Oberfläche oder durch direktes Bearbeiten des Codes konfiguriert werden. Beide Optionen aktualisieren dieselbe zugrunde liegende Datei.
- Visual Editor
- Code Editor (YAML)
Verwenden des Visual Editors
Der Visual Editor unterteilt die Pipeline in zwei Hauptblöcke:
Application Setup (Prepare Stage)
Das Application Setup (bzw. die prepare-Stage) ist eine optionale Phase, die zum Ausführen von Schritten dient, die die Umgebung für das Deployment vorbereiten. Dazu zählt typischerweise das Installieren von Abhängigkeiten, das Bauen von Assets oder das Ausführen von Tests.
Codesphere ermöglicht die direkte Änderung eines persistenten Dateisystems, um Abhängigkeiten zu installieren oder Assets zu kompilieren, ohne den Aufwand vollständiger Container-Rebuilds. Dies ist ideal für schnelle Entwicklung, während Production-Profile diese Stage häufig leer lassen, um die Integrität vorab gebauter, unveränderlicher Images zu bewahren.
- Ausführungsumgebung: Schritte in dieser Stage werden auf den Ressourcen des IDE Pods ausgeführt. Diese gemeinsam genutzte Compute-Umgebung ist für die gesamte Vorbereitung auf Dateisystemebene verantwortlich.
- Bash-Befehle: Unterstützt jeden standardmäßigen Bash-Befehl. Auf + Add New Step klicken, um Logik wie
npm install,nix-envoder das Aufrufen eines Skripts im Dateibaum auszuführen – genau wie in einem lokalen Terminal. - Persistenz: Alle Änderungen innerhalb von
/home/user/app/bleiben über das gemeinsam genutzte Dateisystem-Mount hinweg erhalten. - Ausführungslogik: Da das Dateisystem persistent ist, muss die
prepare-Stage nur ausgelöst werden, wenn sich die Build-Logik oder Abhängigkeiten ändern.
Persistentes Dateisystem
Änderungen am Dateisystem innerhalb von /home/user/app/ werden im persistenten und gemeinsam genutzten Dateisystem-Mount gespeichert, einschließlich z. B. über npm install oder pip install installierter Abhängigkeiten. Die Prepare-Stage muss nicht bei jedem Deployment erneut ausgeführt werden.
Test Stage
Die separate „Test Stage“ wurde aus der Pipeline entfernt. Test- und Linting-Befehle (z. B. npm test oder pytest) sollten nun direkt in die Schritte des Application Setup integriert werden.
Landscape Deployment (Run Stage)
Das Landscape Deployment (bzw. die run-Stage) definiert die Orchestrierung der zusätzlichen Runtime- und Service-Instanzen, die die Anwendung benötigt. Services in dieser Stage werden parallel bereitgestellt und verfügen über Self-Healing-Funktionen, wobei die Schritte innerhalb jedes Services sequenziell ausgeführt werden.
- Service-Orchestrierung: Jeder Service arbeitet als unabhängige Infrastrukturkomponente (z. B. ein Webserver, Worker oder eine Datenbank). Mehr zu verfügbaren Runtimes erfahren.
- Self-Healing: Services werden von der Plattform überwacht; stürzt ein Prozess ab oder wird unerwartet beendet, versucht Codesphere automatisch, ihn neu zu starten.
- Headless Services: HTTP-Router-Weiterleitungen zu bestehenden Endpunkten hinzufügen, ohne zusätzliche Ressourcen zu deployen. Mehr zu Headless Services erfahren.
- Service-Konfiguration: Über Settings (Zahnrad-Symbol) technische Parameter definieren:
- Runtime Config: Der Start Command und das Base Image.
- Resources: Zuweisung von Compute-Plänen.
- Networking: Konfiguration interner Ports und ihrer Zuordnung zu öffentlichen oder privaten Routen.
Compute-Pläne
Für Private Cloud-Installationen können die verfügbaren Compute-Pläne angepasst werden.
Validieren und Speichern
Nach Abschluss der Konfigurationsbearbeitung:
- Oben rechts auf Save Changes klicken.
- Visual Editor aktualisieren: Der Visual Editor aktualisiert sich automatisch, um die Änderungen widerzuspiegeln.
- Schritte überprüfen: Zum Tab Execution Manager navigieren, um sicherzustellen, dass alle Schritte korrekt aufgelistet und konfiguriert sind.
Verwenden des Code Editors
Wer lieber mit Code arbeitet, klickt auf die Schaltfläche Edit as File oben rechts im Editor-Bereich.Eine grundlegende ci.yml besteht aus zwei Hauptstages: prepare und run.
Prepare Stage
Diese Stage wird unmittelbar nach dem Klonen des Codes ausgeführt. Sie dient dem Installieren von Abhängigkeiten und dem Bauen des Projekts.Beispiel:
prepare:
steps:
- name: Install Dependencies
command: npm install
- name: Build Application
command: npm run build
Persistentes Dateisystem
Änderungen am Dateisystem während der Prepare-Stage werden im persistenten und gemeinsam genutzten Dateisystem-Mount gespeichert. Die Prepare-Stage muss nicht bei jedem Deployment erneut ausgeführt werden – nur wenn sich die Build-Schritte ändern.
Test Stage
Die separate „Test Stage“ wurde aus der Pipeline entfernt. Test- und Linting-Befehle (z. B. npm test oder pytest) sollten nun direkt in die Schritte des Application Setup integriert werden. So wird sichergestellt, dass der Code als Teil des Vorbereitungsprozesses validiert wird, bevor die Services initialisiert werden.
Run Stage
Die run-Stage definiert die Landscape-Services, die die Anwendung benötigt, die spezifischen Runtimes, die sie verwenden sollen, sowie ihre Orchestrierungsparameter. Services in dieser Stage werden parallel ausgeführt und verfügen über automatisiertes Health Monitoring, um Prozesse bei Fehlern neu zu starten.
Beispiel:
type-sense-server:
steps:
- command: ./typesense-server --data-dir="$(pwd)"/typesense-data
--api-key=$TYPESENSE_API_KEY --enable-cors
healthEndpoint: http://localhost:8108/health
plan: 301
replicas: 1
volumeMounts:
- name: _workspace
mountPath: /home/user/app
workspacePath: typesense-data
network:
ports:
- port: 3000
isPublic: false
- port: 8108
isPublic: false
paths: []
env:
TYPESENSE_API_KEY: xyz
Validieren und Speichern
Nach Abschluss der Konfigurationsbearbeitung:
- Save Changes:
Cmd + S/Ctrl + Sdrücken - Visual Editor aktualisieren: Den Visual Editor aktualisieren, um die Änderungen widerzuspiegeln
- Schritte überprüfen: Zum Tab Execution Manager navigieren, um sicherzustellen, dass alle Schritte korrekt aufgelistet und konfiguriert sind.