Accelerare lo sviluppo in Cloud Code for IntelliJ

Per velocizzare lo sviluppo locale in Cloud Code per IntelliJ, sfrutta la sincronizzazione dei file e la ricarica dinamica, il deployment automatico al salvataggio e utilizza i moduli Skaffold per sviluppare separatamente parti di un'applicazione.

Attiva la sincronizzazione dei file e il ricaricamento rapido di Skaffold

Per migliorare l'efficienza del flusso di lavoro di sviluppo locale ed evitare di dover ricostruire, eseguire nuovamente il deployment e riavviare i pod, Skaffold supporta la copia dei file modificati in un contenitore di cui è stato eseguito il deployment. Ciò significa che, quando apporti modifiche ai file di codice statico e di origine, puoi vedere che le modifiche vengono applicate in pochi secondi, creando un loop di feedback accelerato.

Per i file statici (come i file HTML e CSS), questo comportamento di copia dei file è chiamato sincronizzazione dei file.

Per i file di codice sorgente, questo comportamento è chiamato ricaricamento a caldo e supporta i seguenti tipi di file:

  • Go: *.go
  • Java: *.java, *.kt, *.scala, *.groovy, *.clj
  • NodeJS: *.js, *.mjs, *.coffee, *.litcoffee, *.json

Con la ricarica rapida configurata, Skaffold rileva le modifiche ai file supportati e le sincronizza con il contenitore in esecuzione nel cluster. Le modifiche ai tipi di file che non supportano il ricoriccamento dinamico attivano la ricostruzione dell'immagine e il riavvio del pod.

La sincronizzazione automatica dei file e il ricaricamento a caldo sono abilitati per impostazione predefinita quando lavori con Buildpacks come tuo builder preferito. Per altri builder come Docker, puoi specificare una sezione sync nel file skaffold.yaml per l'elemento che stai personalizzando.

L'impostazione di sincronizzazione può essere una delle seguenti (in ordine di preferenza):

  • auto: Skaffold configura automaticamente la sincronizzazione. (solo per gli elementi Jib e Buildpacks). Questa è l'impostazione predefinita per i Buildpack.
  • infer: le destinazioni per ogni file modificato vengono dedotte dal generatore.
  • manual: devi specificare i file nella tua area di lavoro locale e la relativa destinazione nel contenitore in esecuzione.

La seguente sezione sync di esempio in un file skaffold.yaml specifica una sincronizzazione manual per sincronizzare tutti i file HTML /static-html con la cartella static in un contenitore:

build:
  artifacts:
    - image: gcr.io/k8s-skaffold/node-example
      context: node
      sync:
        manual:
          - src: 'static-html/*.html'
            dest: static

Per informazioni dettagliate sulla sincronizzazione dei file e sulla specifica delle regole di sincronizzazione, consulta la guida di Skaffold sulla sincronizzazione dei file.

Aggiungere nuove funzionalità durante lo sviluppo su Kubernetes

Dopo aver configurato la sincronizzazione dei file e il ricaricamento rapido, avvia un ciclo di iterazione e aggiungi altre funzionalità al tuo progetto. Le modifiche vengono implementate nel cluster Kubernetes senza interrompere e rimuovere il deployment, compilare e taggare manualmente l'immagine o aggiornare il cluster.

Un ciclo di iterazione standard è simile al seguente:

  1. Apporta una modifica al progetto. Ad esempio, se utilizzi l'app Guestbook Java di Cloud Code, aggiungi un nuovo endpoint alla classe FrontendController come segue:

    1. Apri il file FrontendController.java da src/main/java/cloudcode/guestbook/frontend e aggiungi quanto segue:

      @RequestMapping("/greeting")
      @ResponseBody
      public String greeting(@RequestParam(value="name", defaultValue="World") String name) {
         return String.format("Hello from Kubernetes with IntelliJ, %s!", name);
      }
      
    2. Aggiungi le importazioni necessarie per le nuove annotazioni RequestMapping e ResponseBody.

  2. Salva le modifiche (Ctrl/Cmd+S) o compila il progetto.

    Puoi monitorare l'avanzamento e i log di deployment nella finestra della console. Dopo aver eseguito il deployment delle modifiche, conferma gli aggiornamenti.

  3. Per terminare la sessione di sviluppo continuo, fai clic sull'icona Interrompi.

    Cloud Code elimina tutte le risorse Kubernetes utilizzate per la sessione di sviluppo.

Sviluppare applicazioni di microservizi utilizzando le configurazioni di Skaffold

Quando sviluppi applicazioni di microservizi, può essere utile lavorare su sezioni separate in modo indipendente per semplificare il debug e il deployment.

Puoi sviluppare e eseguire il debug di parti della tua applicazione in modo indipendente dividendola in moduli Skaffold. Ad esempio, l'esempio Bank of Anthos è un'applicazione contenente dieci microservizi. Il file skaffold.yaml del campione raggruppa questi servizi in cinque moduli Skaffold denominati setup, db, frontend, backend e loadgenerator.

Definisci i moduli e le dipendenze di configurazione di Skaffold

Per definire i moduli e le dipendenze di configurazione di Skaffold:

  1. Apri il progetto in cui vuoi definire i moduli.

  2. Apri il file skaffold.yaml.

  3. Se il file skaffold.yaml contiene più configurazioni, per fare di una configurazione un modulo Skaffold, specifica la seguente riga:

    metadata:
      name: MODULE_NAME_1
    

    Ad esempio, in Bank of Anthos skaffold.yaml, il modulo db definisce i deployment dei database:

    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. Per le configurazioni che richiedono il deployment di un'altra configurazione prima di poter eseguire il deployment della configurazione corrente, devi aggiungere la configurazione alle dipendenze. Per specificare una dipendenza di configurazione, aggiungi un elenco configs alla sezione requires del file skaffold.yaml.

    Ad esempio, il file Bank of Anthos skaffold.yaml include la dipendenza di configurazione setup.

    Per definire una dipendenza, aggiungi quanto segue al file skaffold.yaml, dove DEPENDENCY_NAME è il nome della dipendenza.

    requires:
        - configs: DEPENDENCY_NAME
    

    Le configurazioni elencate in questo modo possono fare riferimento alle dipendenze definite nello stesso file o in altri file skaffold.yaml nel progetto corrente.

  5. Testa le dipendenze di configurazione compilando ogni modulo Skaffold singolarmente per assicurarti che vengano di cui vengono eseguiti il deployment con le relative dipendenze seguendo i passaggi descritti in Compilare moduli Skaffold specifici e le relative dipendenze.

Crea moduli Skaffold specifici e le relative dipendenze

Dopo aver definito i moduli e le relative dipendenze, puoi specificare quali moduli vuoi eseguire nella scheda Compilazione / dispiegamento selezionando Esegui > Modifica configurazioni.

  1. Installa le ultime build di Insiders.

  2. Vai a Esegui > Modifica configurazioni e apri la scheda Compilazione / deployment.

  3. Per Configurazione di Skaffold, seleziona skaffold.yaml.

    Scegli una delle opzioni seguenti:

    • Esegui la compilazione e il deployment con tutti i moduli e le dipendenze
    • Crea ed esegui il deployment con (se sono disponibili moduli) e seleziona i moduli che vuoi creare ed eseguire il deployment.

La selezione viene mantenuta per i deployment successivi. Se selezioni un sottoinsieme di moduli, Cloud Code mostra un avviso relativo al deployment di un sottoinsieme di moduli e non dell'intero sistema.

Sviluppo continuo su Kubernetes

Dopo aver configurato il target di esecuzione con le opzioni che preferisci, puoi optare per un'esecuzione regolare dell'applicazione o avviare un ciclo di iterazione di sviluppo nell'IDE per propagare eventuali modifiche apportate al codice sorgente e alle dipendenze all'applicazione in produzione.

Il target di esecuzione Sviluppa su Kubernetes avvia il ciclo di sviluppo sul tuo cluster Kubernetes. Dopo aver avviato il ciclo di sviluppo, Cloud Code, utilizzando Skaffold, crea un'immagine per il progetto, poi la tagga, la esegue push nel repository configurato e utilizza kubectl per eseguire il deployment dei manifest Kubernetes del progetto.

  1. Fai clic sull'icona Sviluppa su Kubernetes e poi su Modifica configurazioni per aprire la finestra di dialogo Esegui/Esegui il debug delle configurazioni.
  2. Personalizza il deployment utilizzando le opzioni di configurazione disponibili.
  3. Se vuoi che Cloud Code ridistribuisca automaticamente l'applicazione al salvataggio delle modifiche, in Modalità di visualizzazione - Ricostruisci e redeploy, seleziona Al salvataggio del file. Per le nuove applicazioni Kubernetes è selezionata per impostazione predefinita l'opzione On demand. Per ulteriori informazioni sulle modalità dello smartwatch, consulta la sezione Modalità dello smartwatch.
  4. Se la tua applicazione è configurata per utilizzare moduli Skaffold, puoi scegliere di compilare o eseguire il deployment solo di moduli specifici.
  5. Quando la configurazione ti soddisfa, fai clic su OK e poi sull'icona Esegui.

Passaggi successivi

Assistenza

Per inviare un feedback o segnalare un problema nell'IDE IntelliJ, vai a Strumenti > Cloud Code > Guida / Informazioni > Invia feedback o segnala un problema per segnalare un problema su GitHub.