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
Elimina la configuración y las importaciones antiguas del archivo
gradle-appengine-plugin
build.gradle
.Añade el nuevo complemento a la sección
buildscript
del archivoclasspath
de tu archivobuild.gradle
:buildscript { repositories { mavenCentral() } dependencies { classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.0.1' } }
En la raíz de tu servicio, ejecuta el siguiente comando para verificar que puedes ejecutar tu aplicación de forma local:
gradle appengineRun
En la sección
buildscript
del archivobuild.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
.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:
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.
En la configuración de
appengine
, modifica la entradarun.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 |