Migrar al complemento Gradle basado en la CLI de gcloud

Si has usado el complemento basado en el SDK de Java App Engine (com.google.appengine.appengine-gradle) y quieres cambiar al nuevo CLI de Google Cloud, migra al complemento basado en gcloud CLI (com.google.cloud.tools.appengine-gradle).

Ventajas del complemento basado en la CLI de gcloud

Al actualizar al nuevo complemento, obtendrás las siguientes ventajas:

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

  • Admite el entorno flexible de App Engine.

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

  • Permite desplegar configuraciones de servicios de App Engine (cron, colas, denegación de servicio y envío) de forma independiente a tu servicio.

Diferencias notables

Antes de realizar la migración, ten en cuenta estas diferencias importantes:

Dependencia de gcloud CLI
El complemento antiguo se ejecuta sin dependencias específicas del entorno local, excepto Java, pero el nuevo requiere que tengas instalada la CLI de gcloud.
No se genera ningún documento de descubrimiento de Endpoints
El nuevo complemento no genera documentos de descubrimiento de Endpoints, una función disponible en otro complemento. Para ejecutar tu backend de Endpoints, ya no es necesario generar este archivo en un paso de compilación, ya que el servidor lo genera en tiempo de ejecución. Solo debes usar el nuevo complemento si necesitas generar bibliotecas de cliente, como para iOS o Android. Para obtener más información sobre los nuevos complementos, consulta la guía Migrar a Endpoints Frameworks para App Engine.
Ya no se admite el formato de archivo EAR
El nuevo complemento ya no admite el formato de archivo EAR para ejecutar e implementar varios servicios al mismo tiempo.
Nuevo comando de despliegue
El complemento antiguo llama al comando appcfg para desplegar aplicaciones, mientras que el nuevo complemento lo hace con la nueva CLI de gcloud.
La mejora de JPA/JDO Datanucleus se debe configurar manualmente
Si tu proyecto usa la mejora de JPA/JDO Datanucleus de gradle-appengine-plugin, debes configurar manualmente la mejora de Datanucleus después de cambiar al complemento basado en la CLI de gcloud. Consulta un ejemplo de Stack Overflow.
Android Studio no es compatible
Puedes cambiar tu proyecto de Android Studio para usar el nuevo complemento, pero el servidor de desarrollo y la compatibilidad con la implementación de App Engine de Android Studio no funcionan con este nuevo complemento. Para ejecutar y desplegar tu aplicación, debes invocar Gradle directamente.

Se pueden usar archivos de configuración XML, pero no YAML.

Migrar al nuevo complemento

  1. Elimina la configuración y las importaciones antiguas del archivo gradle-appengine-pluginbuild.gradle.

  2. Añade el nuevo complemento a la sección buildscript del archivo classpath de tu archivo build.gradle:

    buildscript {
        repositories {
            mavenCentral()
        }
    
        dependencies {
            classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.0.1'
        }
    }
    
  3. En la raíz de tu servicio, ejecuta el siguiente comando para verificar que puedes ejecutar tu aplicación de forma local:

    gradle appengineRun
    
  4. En la sección buildscript del archivo build.gradle, configura la implementación especificando el ID y la versión del proyecto:

    appengine {
        deploy {
            version = 'v1'
            project = "your GCP project ID"
        }
    }
    

    Las nuevas herramientas ignoran los elementos de aplicación y versión de tu archivo appengine-web.xml.

  5. En la raíz de tu servicio, ejecuta el siguiente comando para verificar que puedes desplegar tu aplicación:

    gradle appengineDeploy
    

Migrar configuraciones multiservicio basadas en EAR

El nuevo complemento no admite el empaquetado EAR. En su lugar, permite ejecutar varios servicios de forma local sin necesidad de seguir ningún paso especial de empaquetado.

Para migrar tu proyecto de Gradle basado en EAR, sigue estos pasos:

  1. Elige un servicio principal que se encargue de ejecutar el resto de los servicios. Debes seleccionar tu servicio predeterminado, pero puede ser cualquiera de los servicios que se ejecuten juntos.

  2. En la configuración de appengine, modifica la entrada run.services para incluir todos los servicios que debe ejecutar el servidor de desarrollo local.

    Ejemplo de estructura de proyecto:

    ../{projectRoot}/
      build.gradle
      settings.gradle (includes default-service & secondary-service)
           {your-default-service}/build.gradle {includes appengine-gradle-plugin}
              .
           {your-default-service}/src/main/webapp/WEB-INF/appengine-web.xml
           {your-secondary-service}build.gradle {includes appengine-gradle-plugin}
              .
           {your-secondary-service}/src/main/webapp/WEB-INF/appengine-web.xml
    

    Ejemplo de build.gradle buildscript:

    appengine {
        run {
            // configure the app to point to the right service directories
            services = [
                    projectAsService(project),
                    projectAsService(":another-module")
            ]
        }
    }
    
    // helper method to obtain correct directory and set up dependencies
    def getExplodedAppDir(Project serverProject) {
        // if not 'this' module, then do some setup.
        if (serverProject != project) {
            // make sure we evaluate other modules first so we get the right value
            evaluationDependsOn(serverProject.path)
            // make sure we build "run" depends on the other modules exploding wars
            project.tasks.appengineRun.dependsOn serverProject.tasks.explodeWar
        }
        return serverProject.tasks.explodeWar.explodedAppDirectory
    }
    

Comandos de Gradle basados en el SDK de App Engine y en la CLI de gcloud

En la siguiente tabla se muestran las diferentes formas de invocar el complemento de Gradle, en función de si usas el complemento de Gradle basado en el SDK de App Engine o el complemento de Gradle basado en la CLI de gcloud.

Acción Basado en el SDK de App Engine Basado en la CLI de gcloud
Ejecutar la aplicación de forma local appengine:devserver appengineRun
Despliega una nueva aplicación, versión o servicio. appengine:update appengineDeploy
Define la versión predeterminada de la aplicación. appengine:set_default_version gcloud app services set-traffic o gcloud app versions migrate
Actualiza las tareas cron de la aplicación. appengine:update_cron appengineDeployCron
Actualiza la configuración de envío de la aplicación. appengine:update_dispatch appengineDeployDispatch
Actualiza la configuración de protección contra ataques por denegación de servicio de la aplicación. appengine:update_dos appengineDeployDos
Actualiza las definiciones de la cola de tareas de la aplicación. appengine:update_queues appengineDeployQueue
Actualiza los índices de Datastore. appengine:update_indexes appengineDeployIndex
Elimina los índices que no se usen de la aplicación. appengine:vacuum_indexes gcloud datastore indexes cleanup
Inicia la versión del módulo especificada. appengine:start_module_version gcloud app versions start
Detiene la versión del módulo especificada. appengine:stop_module_version gcloud app versions stop
Revertir una actualización en curso. appengine:rollback gcloud app versions start y gcloud app versions stop

Siguientes pasos

  • Ahora que has migrado al nuevo complemento correctamente, puedes probar y desplegar tu aplicación.