Migrazione al plug-in Maven basato su interfaccia a riga di comando gcloud

Se in precedenza hai utilizzato il plug-in basato su SDK di Java App Engine (com.google.appengine.appengine-maven) e vuoi passare alla nuova interfaccia a riga di comando di Google Cloud, esegui la migrazione al plug-in basato su interfaccia a riga di comando di gcloud (com.google.cloud.tools.appengine-maven).

Vantaggi del plug-in basato sull'interfaccia a riga di comando gcloud

L'upgrade al nuovo plug-in offre i seguenti vantaggi:

  • Utilizza le stesse credenziali di autenticazione di tutti gli altri comandi basati sull'interfaccia a riga di comando gcloud, prodotti dal flusso gcloud auth login standard.

  • Supporta l'ambiente flessibile di App Engine.

  • Aggiorna automaticamente il server di sviluppo locale come parte del flusso di aggiornamento dell'interfaccia a riga di comando standard gcloud.

  • Supporta il deployment delle configurazioni dei servizi App Engine (cron, code, dos, dispatch), indipendentemente dal servizio.

Differenze significative

Prima di eseguire la migrazione, tieni presente queste differenze importanti:

Dipendenza interfaccia a riga di comando gcloud
Il plug-in precedente viene eseguito senza dipendenze specifiche per l'ambiente locale, oltre a Java, ma per il nuovo plug-in è necessario installare l'interfaccia a riga di comando gcloud.
Nessuna generazione di documenti di rilevamento di Endpoints
Il nuovo plug-in non genera documenti di rilevamento di Endpoints, una funzionalità disponibile in un plug-in separato. L'esecuzione del tuo backend di Endpoints non richiede più la generazione di questo file in un passaggio di compilazione, poiché ora il server lo genera in fase di runtime. Dovresti utilizzare il nuovo plug-in solo se devi generare librerie client per iOS o Android. Per ulteriori informazioni sui nuovi plug-in, consulta la guida alla migrazione a Endpoints Frameworks per App Engine.
Formato file EAR non più supportato
Il nuovo plug-in non supporta più il formato file EAR per l'esecuzione e il deployment di più servizi contemporaneamente.
Nuovo comando di deployment
Il plug-in precedente chiama il comando appcfg per eseguire il deployment delle applicazioni, mentre il nuovo plug-in esegue il deployment utilizzando la nuova interfaccia a riga di comando gcloud.
Le attività di miglioramento dei dati JPA/JDO non sono più incluse
Il nuovo plug-in non supporta il miglioramento di Datanucleus di alcun tipo. Se il tuo progetto utilizza il supporto per il miglioramento JDO o JPA di Datanucleus dal plug-in precedente, devi configurare Datanucleus di terze parti (istruzioni JDO), istruzioni di JPA, plug-in Maven separatamente durante la migrazione.

È supportato l'uso di file di configurazione YAML, ma non XML.

Migrazione al nuovo plug-in

Per eseguire la migrazione al nuovo plug-in, procedi nel seguente modo:

  1. Aggiungi il plug-in basato sull'interfaccia a riga di comando gcloud al tuo file pom.xml.

    <build>
        <plugins>
           [...]
              <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>appengine-maven-plugin</artifactId>
                <version>2.7.0</version>
                <configuration>
                    <projectId>your-project-ID-goes-here</projectId>
                    <version>1</version>
                </configuration>
            </plugin>
           [...]
        </plugins>
    </build>
    
  2. Specifica l'ID progetto Google Cloud di destinazione e il servizio e la versione nella configurazione del plug-in. I nuovi strumenti ignorano gli elementi dell'applicazione e della versione nel file appengine-web.xml.

  3. Testa la nuova configurazione eseguendo ed eseguendo il deployment dell'applicazione nel seguente modo:

    1. Esegui l'app utilizzando il nome completo del plug-in:

        mvn com.google.cloud.tools:appengine-maven-plugin:run
      
    2. Esegui il deployment dell'app utilizzando il nome completo del plug-in:

        mvn com.google.cloud.tools:appengine-maven-plugin:deploy
      

      Assicurati di definire lo spazio dei nomi della chiamata all'obiettivo del plug-in se disponi ancora del vecchio plug-in appengine in pom.xml.

Se hai una configurazione più personalizzata, dovresti trovare flag corrispondenti di gestione temporanea, esecuzione locale e deployment nel nuovo plug-in.

Dopo aver verificato che tutto funzioni come previsto, rimuovi l'elemento com.google.appengine appengine-maven-plugin da pom.xml e gli elementi applicazione e versione dal file appengine-web.xml.

Ora puoi richiamare i tuoi nuovi obiettivi del plug-in utilizzando la notazione abbreviata:

mvn package appengine:deploy

Migrazione delle configurazioni multi-servizio basate su EAR

Con il nuovo plug-in, non aggrega i tuoi servizi in un pacchetto EAR. Quando vuoi testare i tuoi servizi localmente, invece, puoi eseguire i singoli servizi oppure eseguire alcuni passaggi aggiuntivi per eseguire più servizi con un solo comando. Quando è tutto pronto per il deployment dei servizi, puoi eseguirne il deployment individualmente o, a seconda di come hai organizzato il tuo progetto, puoi eseguire il deployment di tutti i servizi con un solo comando.

Per eseguire più servizi in locale, aggiorna appengine-maven-plugin con l'elenco dei servizi che vuoi eseguire. Se i tuoi servizi condividono un POM principale, puoi aggiungere questo elenco appengine-maven-plugin nel POM principale. In caso contrario, aggiungi l'elenco a appengine-maven-plugin nel POM del servizio predefinito.

Per aggiungere un elenco di servizi a appengine-maven-plugin:

  1. Per ogni context-root nel pacchetto application.xml del pacchetto EAR, aggiungi un elemento service all'elemento appengine-maven-plugin.

    In ogni elemento service, specifica la sottodirectory target contenente la WAR esplosa del servizio.

    Ad esempio:

    <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>2.7.0</version>
        <configuration>
            <deploy.projectId>your-project-name</deploy.projectId>
            <deploy.version>your-project-version</deploy.version>
            <services>
                <!-- for each service in your EARs application.xml -->
                <service>
                    ${project.parent.basedir}/service-name/target/service-name-${project.version}
                </service>
                <service>
                    ${project.parent.basedir}/another-service/target/another-service-${project.version}
                </service>
            </services>
        </configuration>
    </plugin>
    

    Se la struttura di directory è simile alla seguente:

     ~/my-ear/default-service/
     ~/my-ear/another-service/
    

    Quindi i nomi percorso negli elementi service devono essere visualizzati come segue:

     <service>~/my-ear/default-service/target/default-service-1.0-SNAPSHOT</service>
     <service>~/my-ear/another-service/target/another-service-1.0-SNAPSHOT</service>
    
  2. Verifica che la nuova configurazione funzioni eseguendo il comando seguente dalla directory dei servizi predefinita:

    mvn package appengine:run
    
  3. Dopo aver verificato che il servizio predefinito stia eseguendo tutti i servizi in locale, rimuovi completamente il pacchetto EAR.

Se la directory radice del progetto contiene solo i tuoi servizi, puoi eseguire il deployment di tutti questi servizi con un solo comando mvn appengine:deploy. Devi prima aggiungere appengine-maven-plugin al file pom.xml principale. Quando esegui mvn appengine:deploy, il comando esegue l'iterazione attraverso ciascuno dei servizi del tuo progetto per individuare i file di configurazione e quindi eseguire il deployment di ciascun servizio.

Comandi Maven basati su SDK App Engine e gcloud CLI

La seguente tabella mostra i diversi modi in cui puoi richiamare il plug-in Maven, a seconda che utilizzi il plug-in Maven basato su SDK di App Engine o il plug-in Maven basato su gcloud.

Azione Basato su SDK di App Engine Interfaccia a riga di comando gcloud
Eseguire l'app in locale appengine:devserver appengine:run
Eseguire il deployment di una nuova app, una nuova versione o un nuovo servizio. appengine:update appengine:deploy o appengine:deployAll
Imposta la versione dell'applicazione predefinita. appengine:set_default_version gcloud app services set-traffic o gcloud version versions migrate
Aggiornamento cron job delle applicazioni. appengine:update_cron appengine:deployCron
Aggiorna la configurazione del pacchetto di applicazioni. appengine:update_dispatch appengine:deployDispatch
Aggiorna la configurazione della protezione DoS dell'applicazione. appengine:update_dos appengine:deployDos
Aggiorna le definizioni delle code di attività dell'applicazione. appengine:update_queues appengine:deployQueue
Aggiornamento degli indici Datastore. appengine:update_indexes appengine:deployIndex
Elimina gli indici inutilizzati dall'applicazione. appengine:vacuum_indexes Pulizia degli indici gcloud datastore
Avvia la versione specificata. appengine:start_module_version Avvio delle versioni dell'app gcloud
Interrompi la versione specificata. appengine:stop_module_version Interruzione delle versioni dell'app gcloud
Esegui il rollback di un aggiornamento in corso. appengine:rollback
Tieni presente che puoi anche eseguire la migrazione del traffico a una versione precedente
gcloud start version start, gcloud app versions stop o utilizza gcloud app services set-traffic) per eseguire la migrazione alla versione precedente.