Entwicklung in Cloud Code for IntelliJ beschleunigen

Sie können die lokale Entwicklung in Cloud Code for IntelliJ beschleunigen, indem Sie Dateisynchronisierung und Hot Refresh, die automatische Bereitstellung beim Speichern und Skaffold-Module nutzen, 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. So können Sie Ihren lokalen Entwicklungsworkflow effizienter gestalten und Pods müssen nicht neu erstellt, neu bereitgestellt oder neu gestartet werden. Wenn Sie also Änderungen an statischen Dateien und Quellcodedateien vornehmen, werden diese innerhalb von Sekunden übernommen. Dies führt zu einer beschleunigten Feedbackschleife.

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 das Hot Refresh konfiguriert ist, erkennt Skaffold Änderungen an unterstützten Dateien und synchronisiert diese mit dem ausgeführten Container in Ihrem Cluster. Änderungen an Dateitypen, die kein Hot-Update unterstützen, lösen eine Neuerstellung des Images und einen Pod-Neustart aus.

Die automatische Dateisynchronisierung und Hot Reload sind standardmäßig aktiviert, wenn Sie mit Buildpacks als Ihrem bevorzugten Builder arbeiten. Bei anderen Buildern wie Docker können Sie in der Datei skaffold.yaml einen sync-Abschnitt für das Artefakt angeben, das Sie anpassen.

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 vom Builder abgeleitet.
  • manual: Sie müssen die Dateien in Ihrem lokalen Arbeitsbereich und ihr Ziel im ausgeführten Container angeben.

Im folgenden Beispielabschnitt sync in einer skaffold.yaml-Datei wird eine manual-Synchronisierung angegeben, um alle /static-html-HTML-Dateien mit dem Ordner static 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 Features bei der Entwicklung in Kubernetes hinzufügen

Starten Sie nach dem Einrichten der Dateisynchronisierung und des Hot Refreshes einen Iterationszyklus und fügen Sie Ihrem Projekt weitere Features hinzu. Ihre Änderungen werden in Ihrem Kubernetes-Cluster bereitgestellt, ohne dass die Bereitstellung beendet oder entfernt, das Image manuell erstellt und getaggt oder der Cluster aktualisiert wird.

Ein Standard-Iterationszyklus sieht etwa so aus:

  1. Nehmen Sie eine Änderung an Ihrem Projekt vor. Wenn Sie beispielsweise die Cloud Code Java-Gästebuchanwendung verwenden, fügen Sie der Klasse FrontendController so einen neuen Endpunkt hinzu:

    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 die Änderungen (Ctrl/Cmd+S) oder erstellen Sie das Projekt.

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

  3. Klicken Sie auf das Symbol Beenden, um die Sitzung der kontinuierlichen Entwicklung zu 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 nützlich sein, an separaten Abschnitten zu arbeiten, um die Fehlerbehebung und Bereitstellung zu vereinfachen.

Sie können Teile Ihrer Anwendung unabhängig entwickeln und debuggen, indem Sie sie in Skaffold-Module aufteilen. Das Beispiel Bank of Anthos enthält beispielsweise eine Anwendung mit zehn Mikrodiensten. Die Datei skaffold.yaml des Beispiels gruppiert diese Dienste in fünf Skaffold-Module mit den Namen 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 Ihre skaffold.yaml-Datei mehrere Konfigurationen enthält, geben Sie die folgende Zeile an, um eine Konfiguration zu einem Skaffold-Modul zu machen:

    metadata:
      name: MODULE_NAME_1
    

    Im skaffold.yaml der Bank of Anthos definiert das Modul db 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 der Bereitstellung einer anderen Konfiguration basieren, bevor die aktuelle Konfiguration bereitgestellt werden kann, müssen Sie die Konfiguration zu Ihren Abhängigkeiten hinzufügen. Wenn Sie eine Konfigurationsabhängigkeit angeben möchten, fügen Sie dem Abschnitt requires der Datei skaffold.yaml eine configs-Liste hinzu.

    Die Datei skaffold.yaml der Bank of Anthos enthält beispielsweise die Konfigurationsabhängigkeit setup.

    Fügen Sie der Datei skaffold.yaml Folgendes hinzu, um eine Abhängigkeit zu definieren. Dabei ist DEPENDENCY_NAME der Name der Abhängigkeit.

    requires:
        - configs: DEPENDENCY_NAME
    

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

  5. Testen Sie die Konfigurationsabhängigkeiten. Erstellen Sie dazu jedes Skaffold-Modul separat und prüfen Sie, ob sie mit ihren Abhängigkeiten bereitgestellt werden. Führen Sie dazu die Schritte unter Bestimmte Skaffold-Module und deren Abhängigkeiten erstellen aus.

Spezifische Skaffold-Module und deren Abhängigkeiten erstellen

Nachdem Sie die Module und ihre Abhängigkeiten definiert haben, können Sie auf dem Tab Build/Deploy (Erstellen/Bereitstellen) angeben, welche Module ausgeführt werden sollen. Wählen Sie dazu Run > Edit Configuration (Ausführen > Konfigurationen bearbeiten) aus.

  1. Installieren Sie die neuesten Insider-Builds.

  2. Klicken Sie auf Run > Edit Configuration (Ausführen > Konfigurationen bearbeiten) und öffnen Sie den Tab Build/Deploy (Erstellen/Bereitstellen).

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

    Wählen Sie eine der folgenden Optionen aus:

    • Builds mit allen Modulen und Abhängigkeiten erstellen und bereitstellen
    • Erstellen und bereitstellen mit (wenn Module verfügbar sind) und wählen Sie 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 zur Bereitstellung 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 in der IDE einen Entwicklungsiterationsprozess starten, um alle an der Quelle und Abhängigkeiten vorgenommenen Änderungen an die Live-Anwendung weiterzugeben.

Das Ausführungsziel Develop on Kubernetes startet den Entwicklungszyklus auf dem Kubernetes-Cluster. Nachdem Sie den Entwicklungszyklus gestartet haben, erstellt Cloud Code mit Skaffold ein Image für das Projekt, taggt es per Push an das konfigurierte Repository und stellt mithilfe von kubectl die Kubernetes-Manifeste des Projekts bereit.

  1. Klicken Sie auf das Symbol Develop on Kubernetes und dann auf Edit Configurations, um das Dialogfeld Run/Debug Configurations zu öffnen.
  2. Passen Sie Ihre Bereitstellung mit den verfügbaren Konfigurationsoptionen an.
  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. Bei neuen Kubernetes-Anwendungen ist standardmäßig On Demand ausgewählt. Weitere Informationen zu den Smartwatchmodi finden Sie unter Smartwatch-Modi.
  4. Wenn Ihre Anwendung für die Verwendung von Skaffold-Modulen konfiguriert ist, können Sie nur bestimmte Module erstellen oder bereitstellen.
  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.