Um die lokale Entwicklung in Cloud Code for IntelliJ zu beschleunigen, können Sie die Dateisynchronisierung und den Hot Reload, die automatische Bereitstellung beim Speichern und Skaffold-Module nutzen, um Teile einer Anwendung separat zu entwickeln.
Skaffold-Dateisynchronisierung und Hot Reload aktivieren
Skaffold unterstützt das Kopieren geänderter Dateien in einen bereitgestellten Container, um die Effizienz des lokalen Entwicklungsworkflows zu verbessern und die Neuerstellung, erneute Bereitstellung und den Neustart von Pods zu vermeiden. Wenn Sie also Änderungen an statischen und Quellcodedateien vornehmen, werden Ihre Änderungen innerhalb von Sekunden angezeigt, wodurch eine beschleunigte Feedback-Schleife entsteht.
Bei statischen Dateien (z. B. HTML- und CSS-Dateien) wird dieses Kopierverhalten als Dateisynchronisierung bezeichnet.
Bei Quellcodedateien wird dieses Verhalten als Hot Reload bezeichnet und unterstützt die folgenden Dateitypen:
- Go: *.go
- Java: *.java, *.kt, *.scala, *.groovy, *.clj
- NodeJS: *.js, *.mjs, *.coffee, *.litcoffee, *.json
Wenn Hot Reload konfiguriert ist, erkennt Skaffold Änderungen an unterstützten Dateien und synchronisiert diese Änderungen mit dem ausgeführten Container in Ihrem Cluster. Änderungen an Dateitypen, die kein Hot Reload unterstützen, lösen eine Image-Neuerstellung und einen Pod-Neustart aus.
Die automatische Dateisynchronisierung und Hot Reload sind standardmäßig aktiviert, wenn Sie mit Buildpacks als Ihrem bevorzugten Builder arbeiten. Für andere Builder wie Docker können Sie in der Datei skaffold.yaml
einen sync
-Abschnitt für das anzupassende Artefakt angeben.
Folgende Synchronisierungseinstellungen können festgelegt werden (in der Reihenfolge ihrer Präferenz):
auto
: Skaffold konfiguriert die Synchronisierung automatisch. (nur für Jib- und Buildpacks-Artefakte) Dies ist die Standardeinstellung für Buildpacks.infer
: Die Ziele für jede geänderte Datei werden aus dem Builder abgeleitet.manual
: Sie müssen die Dateien in Ihrem lokalen Arbeitsbereich und ihr Ziel im laufenden Container angeben.
Der folgende Beispielabschnitt sync
in einer skaffold.yaml
-Datei gibt eine manual
-Synchronisierung an, um alle /static-html
-HTML-Dateien mit dem static
-Ordner in einem Container zu synchronisieren:
build: artifacts: - image: gcr.io/k8s-skaffold/node-example context: node sync: manual: - src: 'static-html/*.html' dest: static
Einen detaillierten Blick auf die Dateisynchronisierung und die Angabe von Synchronisierungsregeln finden Sie im Skaffold-Leitfaden zur Dateisynchronisierung.
Neue Funktionen bei der Entwicklung in Kubernetes hinzufügen
Nachdem Sie die Dateisynchronisierung und das Hot Reloading eingerichtet haben, starten Sie einen Iterationszyklus und fügen Sie Ihrem Projekt weitere Funktionen hinzu. Ihre Änderungen werden in Ihrem Kubernetes-Cluster bereitgestellt, ohne dass dadurch das Deployment angehalten oder entfernt, das Image manuell erstellt und mit Tags versehen oder der Cluster aktualisiert werden muss.
Ein standardmäßiger Iterationszyklus sieht in etwa so aus:
Nehmen Sie eine Änderung an Ihrem Projekt vor. Wenn Sie beispielsweise die Cloud Code Java-Gästebuch-App verwenden, fügen Sie der Klasse
FrontendController
so einen neuen Endpunkt hinzu:Öffnen Sie die Datei
FrontendController.java
aussrc/main/java/cloudcode/guestbook/frontend
und fügen Sie Folgendes hinzu:@RequestMapping("/greeting") @ResponseBody public String greeting(@RequestParam(value="name", defaultValue="World") String name) { return String.format("Hello from Kubernetes with IntelliJ, %s!", name); }
Fügen Sie die erforderlichen Importe für die neuen Annotationen
RequestMapping
undResponseBody
hinzu.
Speichern Sie die Änderungen (
Ctrl
/Cmd+S
) oder erstellen Sie das Projekt.Im Konsolenfenster können Sie Fortschritts- und Bereitstellungslogs aufrufen. Bestätigen Sie die Änderungen, nachdem sie bereitgestellt wurden.
Klicken Sie zum Beenden der kontinuierlichen Entwicklungssitzung auf das Symbol Beenden.
Cloud Code löscht alle Kubernetes-Ressourcen, die für die Entwicklungssitzung verwendet wurden.
Mikrodienstanwendungen mit Skaffold-Konfigurationen entwickeln
Bei der Entwicklung von Mikrodienstanwendungen kann es hilfreich sein, unabhängig an separaten Abschnitten zu arbeiten, um das Debuggen und Bereitstellen zu vereinfachen.
Sie können Teile Ihrer Anwendung unabhängig voneinander entwickeln und debuggen, indem Sie Ihre Anwendung in Skaffold-Module aufteilen. Die Beispielanwendung Bank of Anthos ist beispielsweise eine Anwendung mit zehn Mikrodiensten. In der skaffold.yaml
-Datei des Beispiels sind diese Dienste in fünf Sdk-Module mit den Namen setup
, db
, frontend
, backend
und loadgenerator
gruppiert.
Skaffold-Module und Konfigurationsabhängigkeiten definieren
So definieren Sie Skaffold-Module und Konfigurationsabhängigkeiten:
Öffnen Sie das Projekt, in dem Sie die Module definieren möchten.
Öffnen Sie die Datei
skaffold.yaml
.Wenn die Datei
skaffold.yaml
mehrere Konfigurationen enthält, geben Sie die folgende Zeile an, um eine Konfiguration als Skaffold-Modul zu erstellen:metadata: name: MODULE_NAME_1
In der Bank of Anthos-
skaffold.yaml
-Umgebung definiert dasdb
-Modul beispielsweise Datenbankbereitstellungen:Für Konfigurationen, die auf einer anderen Konfiguration basieren, bevor die aktuelle Konfiguration bereitgestellt werden kann, müssen Sie die Konfiguration den Abhängigkeiten hinzufügen. Wenn Sie eine Konfigurationsabhängigkeit angeben möchten, fügen Sie dem Abschnitt
requires
der Dateiskaffold.yaml
eineconfigs
-Liste hinzu.Die
skaffold.yaml
-Datei der Bank of Anthos enthält beispielsweise die Konfigurationsabhängigkeitsetup
.Wenn Sie eine Abhängigkeit definieren möchten, fügen Sie der Datei
skaffold.yaml
Folgendes hinzu, wobei DEPENDENCY_NAME der Name der Abhängigkeit ist.requires: - configs: DEPENDENCY_NAME
Auf diese Weise aufgelistete Konfigurationen können auf Abhängigkeiten verweisen, die in derselben Datei oder in anderen
skaffold.yaml
-Dateien im aktuellen Projekt definiert sind.Testen Sie Ihre Konfigurationsabhängigkeiten, indem Sie jedes Skaffold-Modul separat erstellen. So können Sie prüfen, ob diese mit ihren Abhängigkeiten bereitgestellt werden. Führen Sie dazu die Schritte unter Bestimmte Skaffold-Module und ihre Abhängigkeiten erstellen aus.
Bestimmte Skaffold-Module und ihre Abhängigkeiten erstellen
Nachdem Sie Ihre Module und ihre Abhängigkeiten definiert haben, können Sie auf dem Tab Build / Deploy angeben, welche Module ausgeführt werden sollen. Wählen Sie dazu Ausführen > Konfigurationen bearbeiten aus.Installieren Sie die neuesten Insider-Builds.
Klicken Sie auf Ausführen > Konfigurationen bearbeiten und öffnen Sie den Tab Build / Deploy.
Wählen Sie für Skaffold-Konfiguration die Datei skaffold.yaml aus.
Wählen Sie eine der folgenden Optionen aus:
- Mit allen Modulen und Abhängigkeiten erstellen und bereitstellen
- Wählen Sie Erstellen und Bereitstellen mit aus (falls Module verfügbar sind) und die Module aus, die Sie erstellen und bereitstellen möchten.
Ihre Auswahl bleibt für nachfolgende Bereitstellungen erhalten. Wenn Sie eine Teilmenge von Modulen auswählen, zeigt Cloud Code eine Warnung zur Bereitstellung einer Teilmenge von Modulen und nicht des gesamten Systems an.
Kontinuierliche Entwicklung in Kubernetes
Nachdem Sie das Ausführungsziel mit den gewünschten Optionen konfiguriert haben, können Sie die Anwendung entweder regelmäßig ausführen oder einen Entwicklungsdurchlauf in Ihrer IDE starten, um eventuelle Änderungen an der Quelle und Abhängigkeiten in die Live-Anwendung zu übernehmen.
Das Ausführungsziel Auf Kubernetes entwickeln startet den Entwicklungszyklus für einen Kubernetes-Cluster. Nachdem Sie den Entwicklungszyklus gestartet haben, erstellt Cloud Code mit Skaffold ein Image für das Projekt, fügt es dann hinzu, überträgt es per Push in das konfigurierte Repository und stellt mit kubectl die Kubernetes-Manifeste des Projekts bereit.
- Klicken Sie auf das Symbol Auf Kubernetes entwickeln und dann auf Konfigurationen bearbeiten, um das Dialogfeld Ausführungs-/Fehlerbehebungskonfigurationen zu öffnen.
- Passen Sie die Bereitstellung mit den verfügbaren Konfigurationsoptionen an.
- Wenn Sie möchten, dass Cloud Code Ihre Anwendung automatisch noch einmal bereitstellt, nachdem Ihre Änderungen gespeichert wurden, wählen Sie unter Watch mode - rebuild and redeploy die Option On filesave aus. Für neue Kubernetes-Anwendungen ist standardmäßig On-Demand ausgewählt. Weitere Informationen zu Watch-Modi finden Sie unter Watch-Modi.
- Wenn Ihre Anwendung für die Verwendung von Skaffold-Modulen konfiguriert ist, können Sie auswählen, dass nur bestimmte Module erstellt oder bereitgestellt.
- Wenn Sie mit der Konfiguration zufrieden sind, klicken Sie auf OK und dann auf das Symbol Ausführen.
Nächste Schritte
- Verwenden Sie den integrierten Minikube-Cluster von Cloud Code für die lokale Entwicklung.
- Anwendung in Cloud Code debuggen
- Weitere Informationen zur Dateisynchronisierungsfunktion von Skaffold