Entwicklung in Cloud Code for IntelliJ beschleunigen

Um Ihre lokale Entwicklung in Cloud Code for IntelliJ zu beschleunigen, nutzen Sie Synchronisierung und Hot Refresh, automatische Bereitstellung beim Speichern und Verwenden von Skaffold-Modulen um Teile einer Anwendung separat zu entwickeln.

Skaffold-Dateisynchronisierung und Hot Refresh 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 arbeiten, können Sie sehen, dass Ihre Änderungen in Sekundenschnelle wirksam werden, was zu einer beschleunigten Feedback Loop ein.

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 Refresh konfiguriert ist, erkennt Skaffold Änderungen an unterstützten Dateien und synchronisiert diese Änderungen am ausgeführten Container in Ihrem Cluster vorzunehmen. Ä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 einen sync-Abschnitt in Ihrer skaffold.yaml-Datei für die das du anpassst.

Folgende Synchronisierungseinstellungen können festgelegt werden (in der Reihenfolge ihrer Präferenz):

  • auto: Skaffold konfiguriert die Synchronisierung automatisch. (nur für Jib und Buildpacks) artifacts.) Dies ist die Standardeinstellung für Buildpacks.
  • infer: Die Ziele für jede geänderte Datei werden vom Builder abgeleitet.
  • manual: Sie müssen die Dateien in Ihrem lokalen Arbeitsbereich und ihr Ziel im laufenden Container angeben.

Im folgenden Beispielabschnitt sync in einer skaffold.yaml-Datei wird ein manual synchronisieren, um alle /static-html-HTML-Dateien mit static zu synchronisieren Ordner in einem Container:

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 Features beim Entwickeln 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 Kubernetes bereitgestellt ohne das Deployment anzuhalten und zu entfernen, das Image mit Tags versehen oder den Cluster aktualisieren.

Ein Standard-Iterationszyklus sieht etwa so aus:

  1. Nehmen Sie eine Änderung an Ihrem Projekt vor. Wenn Sie z. B. das Tag Cloud Code Java Guestbook-Anwendung einen neuen Endpunkt zum FrontendController so:

    1. Öffnen Sie die Datei FrontendController.java aus src/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);
      }
      
    2. Fügen Sie die erforderlichen Importe für die neuen Annotationen RequestMapping und ResponseBody hinzu.

  2. Speichern Sie Ihre Änderungen (Ctrl/Cmd+S) oder erstellen Sie das Projekt.

    Im Konsolenfenster können Sie Fortschritts- und Bereitstellungslogs aufrufen. Bestätigen Sie die Updates, nachdem die Änderungen bereitgestellt wurden.

  3. Klicken Sie auf das Symbol Beenden, um die Sitzung der kontinuierlichen Entwicklung zu beenden.

    Cloud Code löscht alle für die Entwicklungssitzung verwendeten Kubernetes-Ressourcen.

Mikrodienstanwendungen mit Skaffold-Konfigurationen entwickeln

Bei der Entwicklung von Mikrodienstanwendungen kann es hilfreich sein, an separaten um Debugging und Bereitstellung zu vereinfachen.

Sie können Teile Ihrer Anwendung unabhängig entwickeln und debuggen, indem Sie Skaffold-Module hinzufügen. Beispiel: Der Parameter Beispiel für Bank of Anthos ist eine Anwendung mit zehn Mikrodiensten. Das Beispiel skaffold.yaml diese Dienste in fünf Skaffold-Module namens setup, db, frontend, backend und loadgenerator.

Skaffold-Module und Konfigurationsabhängigkeiten definieren

So definieren Sie Skaffold-Module und Konfigurationsabhängigkeiten:

  1. Öffnen Sie das Projekt, in dem Sie die Module definieren möchten.

  2. Öffnen Sie die Datei skaffold.yaml.

  3. 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 das db-Modul beispielsweise Datenbankbereitstellungen:

    apiVersion: skaffold/v3
    kind: Config
    metadata:
      name: db # module defining database deployments
    requires:
    - configs:
      - setup
    build:
      artifacts:
      - image: accounts-db
        context: src/accounts-db
      - image: ledger-db
        context: src/ledger-db
    manifests:
      rawYaml:
      - dev-kubernetes-manifests/accounts-db.yaml
      - dev-kubernetes-manifests/ledger-db.yaml
    deploy:
      kubectl: {}
  4. Bei Konfigurationen, die auf einer anderen Konfiguration basieren, bevor die aktuelle Konfiguration bereitgestellt werden kann, müssen Sie die Konfiguration den Abhängigkeiten hinzufügen. Fügen Sie zum Angeben einer Konfigurationsabhängigkeit eine configs-Liste zur Abschnitt requires Ihrer skaffold.yaml-Datei.

    Beispielsweise enthält die skaffold.yaml-Datei der Bank of Anthos Folgendes: Konfigurationsabhängigkeit setup.

    Zum Definieren einer Abhängigkeit fügen Sie der Datei skaffold.yaml Folgendes hinzu: DEPENDENCY_NAME ist der Name der Abhängigkeit.

    requires:
        - configs: DEPENDENCY_NAME
    

    Auf diese Weise aufgeführte Konfigurationen können auf Abhängigkeiten verweisen, die in der dieselbe Datei oder andere skaffold.yaml-Dateien im aktuellen Projekt.

  5. Konfigurationsabhängigkeiten durch Erstellen jedes einzelnen Skaffold testen um sicherzustellen, dass sie mit ihren Abhängigkeiten mithilfe der Schritte in Spezifische Skaffold-Module und deren Abhängigkeiten erstellen

Bestimmte Skaffold-Module und deren 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.

  1. Installieren Sie die neuesten Insider-Builds.

  2. Gehen Sie zu Ausführen > Bearbeiten Sie Konfigurationen und öffnen Sie den Tab Erstellen / Bereitstellen.

  3. Wählen Sie für die Skaffold-Konfiguration die Datei skaffold.yaml aus.

    Wählen Sie eine der folgenden Optionen aus:

    • Mit allen Modulen und Abhängigkeiten erstellen und bereitstellen
    • Erstellen und bereitstellen mit (wenn Module verfügbar sind) und wählen Sie die Module, die Sie erstellen und bereitstellen möchten.

Ihre Auswahl bleibt für nachfolgende Bereitstellungen erhalten. Wenn Sie eine Teilmenge der Module, zeigt Cloud Code eine Warnung zum Bereitstellen einer Teilmenge an statt des gesamten Systems.

Kontinuierliche Entwicklung in Kubernetes

Nachdem Sie das Ausführungsziel mit den gewünschten Optionen konfiguriert haben, Ihre App regelmäßig ausführen oder mit der Entwicklung beginnen, Iterationszyklus in Ihrer IDE an, um alle Änderungen zu Ihrer Live-Anwendung hinzufügen.

Das Ausführungsziel Develop on Kubernetes startet den Entwicklungszyklus auf Ihrer Kubernetes-Cluster. Nach dem Start des Entwicklungszyklus Cloud Code erstellt mit Skaffold ein Image für die und taggt es, überträgt es per Push in das konfigurierte Repository und verwendet kubectl die Kubernetes-Manifeste des Projekts bereitstellen.

  1. Klicken Sie auf das Symbol Develop on Kubernetes und dann auf Edit Configurations (Konfigurationen bearbeiten), um das Dialogfeld Run/Debug Configurations (Ausführungs-/Fehlerbehebungskonfigurationen) zu öffnen.
  2. Passen Sie Ihre Bereitstellung mithilfe der verfügbaren Konfigurationsoptionen.
  3. 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. Neue Kubernetes-Anwendungen Die Option On demand ist standardmäßig ausgewählt. Weitere Informationen zu Watch-Modi finden Sie unter Watch-Modi.
  4. Wenn Ihre Anwendung für die Verwendung von Skaffold-Modulen konfiguriert ist, können Sie auswählen, dass nur bestimmte Module erstellt oder bereitgestellt.
  5. Wenn Sie mit der Konfiguration zufrieden sind, klicken Sie auf OK und dann auf das Symbol Ausführen.

Nächste Schritte

Support kontaktieren

So senden Sie Feedback oder melden ein Problem in Ihrer IntelliJ-IDE: Tools > Cloud Code > Hilfe / Info > Feedback geben oder Problem melden, um ein Problem auf GitHub zu melden oder stellen Sie eine Frage zu Stack Overflow.