Migra al complemento de Maven basado en la CLI de gcloud

Si ya usaste el complemento del SDK de App Engine para Java (com.google.appengine.appengine-maven) y deseas pasar a la nueva Google Cloud CLI, migra al complemento basado en la CLI (com.google.cloud.tools.appengine-maven).

Beneficios del complemento basado en la CLI de gcloud

La actualización al complemento nuevo brinda estos beneficios:

  • Usa las mismas credenciales de autenticación que usan todos los otros comandos basados en la CLI de gcloud, que se producen a partir del flujo gcloud auth login estándar.

  • Es compatible con el entorno flexible de App Engine.

  • Actualiza de manera automática el servidor de desarrollo local como parte del flujo de actualización estándar de la CLI de gcloud.

  • Admite la implementación de las configuraciones de servicio de App Engine (cron, colas, DoS, envío), de forma independiente de tu servicio.

Diferencias destacadas

Antes de migrar, ten en cuenta estas diferencias importantes:

dependencia de la CLI de gcloud
El complemento anterior se ejecuta sin dependencias específicas del entorno local, además de Java, pero el nuevo requiere que instales la CLI de gcloud.
Sin generación de documentos de descubrimiento de extremos
El complemento nuevo no genera documentos de descubrimiento de Endpoints. Esta característica está disponible en un complemento distinto. La ejecución del backend de extremos ya no requiere la generación de este archivo en un paso de compilación, ya que ahora el servidor lo genera en el entorno de ejecución. Usa el complemento nuevo solo si necesitas generar bibliotecas cliente como las de iOS o Android. Si quieres obtener más información sobre los complementos nuevos, revisa la guía Migra a Endpoints Frameworks para App Engine.
El formato de archivo EAR ya no es compatible
El complemento nuevo ya no admite el formato de archivo EAR para implementar y ejecutar varios servicios a la vez.
Comando de implementación nuevo
El complemento anterior llama al comando appcfg para implementar aplicaciones, mientras que el complemento nuevo implementa con la nueva CLI de gcloud.
No se incluyen las tareas de mejora de JPA o JDO de Datanucleus
El complemento nuevo no admite mejoras de Datanucleus de ningún tipo. Si el proyecto usa la asistencia para la mejora de JDO o JPA de Datanucleus del complemento anterior, debes configurar aparte el complemento de Maven de terceros de Datanucleus (instrucciones para JDO y JPA) cuando migras.

Se admite el uso de los archivos de configuración YAML, pero no los XML.

Migra al complemento nuevo

Para migrar al complemento nuevo, haz lo siguiente:

  1. Agrega el complemento basado en la CLI de gcloud a tu archivo 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. Especifica el ID del proyecto de Google Cloud de destino, además del servicio y la versión, en la configuración del complemento. Las herramientas nuevas ignoran los elementos de la aplicación y la versión en el archivo appengine-web.xml.

  3. Prueba la configuración nueva mediante la ejecución y la implementación de tu aplicación de la siguiente manera:

    1. Ejecuta la app con el nombre calificado del complemento:

        mvn com.google.cloud.tools:appengine-maven-plugin:run
      
    2. Implementa la app con el nombre completamente calificado del complemento:

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

      Asegúrate de asignar un espacio de nombres a la invocación de destino del complemento si aún tienes el complemento appengine anterior en pom.xml.

Si tienes una configuración más personalizada, encontrarás marcas equivalentes de etapa de pruebas, ejecución local e implementación en el complemento nuevo.

Después de verificar que todo funciona de la forma prevista, quita el complemento com.google.appengine appengine-maven-plugin del archivo pom.xml y quita los elementos de la versión y la aplicación del archivo appengine-web.xml.

Ahora puedes invocar los objetivos del complemento nuevo con la notación reducida:

mvn package appengine:deploy

Migra configuraciones de varios servicios basadas en EAR

Con el complemento nuevo, no debes agrupar tus servicios en un paquete EAR. En cambio, cuando desees probar los servicios de forma local, puedes ejecutar cada servicio de forma individual o seguir algunos pasos adicionales para ejecutar varios servicios con un solo comando. Cuando estés listo para implementar los servicios, puedes implementarlos de manera individual o, según cómo hayas organizado el proyecto, puedes implementar todos los servicios con un solo comando.

Para ejecutar varios servicios de forma local, actualiza el appengine-maven-plugin con la lista de servicios que deseas ejecutar. Si los servicios comparten un POM superior, puedes agregar esta lista a appengine-maven-plugin en el POM superior. De lo contrario, agrega la lista a appengine-maven-plugin en el POM del servicio predeterminado.

Para agregar la lista de servicios a appengine-maven-plugin, haz lo siguiente:

  1. Para cada context-root en el archivo application.xml de tu paquete EAR, agrega un elemento service a appengine-maven-plugin.

    En cada elemento service, especifica el subdirectorio target que contiene el WAR expandido del servicio.

    Por ejemplo:

    <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>
    

    Supongamos que la estructura del directorio se ve de la siguiente manera:

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

    Si ese es el caso, los nombres de las rutas de acceso en los elementos service deben procesarse como se muestra a continuación:

     <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. Ejecuta el siguiente comando desde tu directorio de servicios predeterminado para confirmar que la configuración nueva funciona:

    mvn package appengine:run
    
  3. Después de verificar que el servicio predeterminado ejecuta todos los servicios de forma local, quita tu paquete EAR por completo.

Si el directorio raíz del proyecto contiene solo tus servicios, puedes implementarlos todos con un solo comando mvn appengine:deploy. Primero debes agregar el complemento appengine-maven-plugin al archivo superior pom.xml. Cuando ejecutas mvn appengine:deploy, el comando itera en cada uno de los servicios del proyecto para ubicar los archivos de configuración y, luego, implementar cada servicio.

Comparación de los comandos de Maven basados en el SDK de App Engine y los comandos basados en la CLI de gcloud

En la siguiente tabla, se muestran las diferentes formas en que se invoca el complemento de Maven, dependiendo de si usas el complemento de Maven basado en el SDK de App Engine o el basado en la CLI de gcloud.

Acción Basado en el SDK de App Engine Basado en la CLI de gcloud
Ejecuta la app de forma local appengine:devserver appengine:run
Implementar una app, una versión o un servicio nuevo appengine:update appengine:deploy o appengine:deployAll
Configurar la versión de la aplicación predeterminada appengine:set_default_version gcloud app services set-traffic o gcloud app versions migrate
Actualizar los trabajos cron de la aplicación appengine:update_cron appengine:deployCron
Actualiza la configuración de despacho de la aplicación. appengine:update_dispatch appengine:deployDispatch
Actualizar la configuración de protección contra DoS de la aplicación appengine:update_dos appengine:deployDos
Actualizar las definiciones de la lista de tareas en cola de la aplicación appengine:update_queues appengine:deployQueue
Actualizar los índices de Datastore appengine:update_indexes appengine:deployIndex
Borrar los índices sin uso de la aplicación appengine:vacuum_indexes Limpieza de índices de Datastore de gcloud
Inicia la versión especificada appengine:start_module_version gcloud app versions start
Detener la versión especificada appengine:stop_module_version gcloud app versions stop
Revertir una actualización en curso appengine:rollback
Ten en cuenta que también puedes migrar el tráfico a una versión anterior.
Usa gcloud app versions start, gcloud app versions stop o gcloud app services set-traffic para migrar a una versión anterior.