Si quieres acelerar tu desarrollo local en Cloud Code para IntelliJ, aprovecha la sincronización de archivos y la recarga en caliente, la implementación automática en el momento de guardar y usa los módulos de Skaffold para desarrollar partes de una aplicación por separado.
Habilita la sincronización de archivos y la recarga en caliente de Skaffold
Para mejorar la eficiencia de tu flujo de trabajo de desarrollo local y evitar tener que volver a compilar, implementar y reiniciar los Pods, Skaffold admite la copia de archivos modificados en un contenedor implementado. Esto significa que, cuando realices cambios en los archivos estáticos y de código fuente, podrás ver cómo se aplican en segundos, lo que genera un ciclo de retroalimentación acelerado.
En el caso de los archivos estáticos (como los archivos HTML y CSS), este comportamiento de copia de archivos se denomina sincronización de archivos.
Para los archivos de código fuente, este comportamiento se denomina recarga en caliente y admite los siguientes tipos de archivos:
- Go: *.go
- Java: *.java, *.kt, *.scala, *.groovy, *.clj
- NodeJS: *.js, *.mjs, *.coffee, *.litcoffee, *.json
Con la recarga en caliente configurada, Skaffold detecta cambios en los archivos compatibles y los sincroniza con el contenedor en ejecución en el clúster. Los cambios en los tipos de archivos que no admiten la recarga en caliente activan una recompilación de imagen y un reinicio del Pod.
La sincronización automática de archivos y la recarga en caliente están habilitadas de forma predeterminada cuando trabajas con Buildpacks como compilador preferido. Para otros compiladores como Docker, puedes especificar una sección sync
en el archivo skaffold.yaml
para el artefacto que estás personalizando.
La configuración de sincronización puede ser una de las siguientes (en orden de preferencia):
auto
: Skaffold configura la sincronización automáticamente. (solo para artefactos Jib y Buildpacks). Es el valor predeterminado de Buildpacks.infer
: Los destinos de cada archivo modificado se infieren del compilador.manual
: Debes especificar los archivos en tu lugar de trabajo local y su destino en el contenedor en ejecución.
En la siguiente sección sync
de ejemplo en un archivo skaffold.yaml
, se especifica una sincronización de manual
para sincronizar todos los archivos HTML /static-html
con la carpeta static
en un contenedor:
build: artifacts: - image: gcr.io/k8s-skaffold/node-example context: node sync: manual: - src: 'static-html/*.html' dest: static
Para obtener un panorama detallado de la sincronización de archivos y especificar las reglas de sincronización, consulta la guía de Skaffold sobre la sincronización de archivos.
Agrega funciones nuevas cuando desarrollas funciones en Kubernetes
Después de configurar la sincronización de archivos y la recarga en caliente, inicia un ciclo de iteración y agrega más funciones a tu proyecto. Los cambios se implementan en tu clúster de Kubernetes sin detener ni quitar la implementación, compilar y etiquetar manualmente la imagen, ni actualizar el clúster.
Un ciclo de iteración estándar se parece al siguiente:
Haz un cambio en tu proyecto. Por ejemplo, si usas la app del libro de visitas de Cloud Code para Java, agrega un extremo nuevo a la clase
FrontendController
de la siguiente manera:Abre el archivo
FrontendController.java
desdesrc/main/java/cloudcode/guestbook/frontend
y agrega lo siguiente:@RequestMapping("/greeting") @ResponseBody public String greeting(@RequestParam(value="name", defaultValue="World") String name) { return String.format("Hello from Kubernetes with IntelliJ, %s!", name); }
Agrega las importaciones necesarias para las anotaciones nuevas,
RequestMapping
yResponseBody
.
Guarda los cambios (
Ctrl
/Cmd+S
) o compila el proyecto.Puedes mirar el progreso y los registros de la implementación en la ventana de la consola. Después de implementar los cambios, confirma las actualizaciones.
Para finalizar la sesión de desarrollo continuo, haz clic en el ícono Detener.
Cloud Code borra todos los recursos de Kubernetes que se usaron para la sesión de desarrollo.
Desarrolla aplicaciones de microservicios con las configuraciones de Skaffold
Cuando se desarrollan aplicaciones de microservicios, puede ser útil trabajar en secciones separadas de forma independiente para simplificar la depuración y la implementación.
Puedes desarrollar y depurar partes de tu aplicación de forma independiente si la divides en módulos de Skaffold. Por ejemplo, el Bank of Anthos de muestra es una aplicación que contiene diez microservicios. El archivo skaffold.yaml
de muestra agrupa estos servicios en cinco módulos de Skaffold llamados setup
, db
, frontend
, backend
y loadgenerator
.
Define módulos y dependencias de configuración de Skaffold
Para definir módulos y dependencias de configuración de Skaffold, haz lo siguiente:
Abre el proyecto en el que deseas definir los módulos.
Abre el archivo
skaffold.yaml
.Si tu archivo
skaffold.yaml
tiene varias configuraciones, especifica la siguiente línea para convertir una configuración en un módulo de Skaffold:metadata: name: MODULE_NAME_1
Por ejemplo, en el
skaffold.yaml
del Bank of Anthos, el módulodb
define las implementaciones de bases de datos:Para los parámetros de configuración que dependen de otra configuración que se implemente antes de que se pueda implementar la configuración actual, debes agregar la configuración a tus dependencias. Para especificar una dependencia de configuración, agrega una lista de
configs
a la secciónrequires
de tu archivoskaffold.yaml
.Por ejemplo, el archivo
skaffold.yaml
del Bank of Anthos incluye la dependencia de configuraciónsetup
.Para definir una dependencia, agrega lo siguiente a tu archivo
skaffold.yaml
, en el que DEPENDENCY_NAME es el nombre de tu dependencia.requires: - configs: DEPENDENCY_NAME
Las configuraciones que se enumeran de esta manera pueden hacer referencia a dependencias definidas en el mismo archivo o en otros archivos
skaffold.yaml
del proyecto actual.Prueba tus dependencias de configuración. Para ello, compila cada uno de los módulos de Skaffold por separado y asegúrate de que se implementen con sus dependencias. Para ello, sigue los pasos que se indican en Cómo compilar módulos específicos de Skaffold y sus dependencias.
Compila módulos específicos de Skaffold y sus dependencias
Después de definir los módulos y sus dependencias, puedes especificar qué módulos quieres ejecutar en la pestaña Build / Deploy cuando seleccionas Run > Edit configurations.Instala las últimas compilaciones de usuarios con información privilegiada.
Ve a Ejecutar > Editar configuración y abre la pestaña Compilar / Implementar.
En la configuración de Skaffold, selecciona skaffold.yaml.
Elige una de estas opciones:
- Compila e implementa con todos los módulos y dependencias
- Compila e implementa con (si hay módulos disponibles) y selecciona los que quieres compilar e implementar.
Tu selección se conservará para implementaciones posteriores. Si seleccionas un subconjunto de módulos, Cloud Code muestra una advertencia sobre la implementación de un subconjunto de módulos y no todo el sistema.
Desarrollo continuo en Kubernetes
Una vez que hayas configurado tu objetivo de ejecución con las opciones que desees, puedes optar por una ejecución habitual de tu aplicación o iniciar un ciclo de iteración de desarrollo en tu IDE para propagar cualquier cambio realizado en el origen y las dependencias de la aplicación activa.
El objetivo de ejecución Desarrollar en Kubernetes comienza el ciclo de desarrollo en tu clúster de Kubernetes. Después de que comienzas el ciclo de desarrollo, Cloud Code mediante Skaffold compila una imagen para el proyecto y, luego, la etiqueta, la envía al repositorio configurado y usa kubectl a fin de implementar los manifiestos de Kubernetes del proyecto.
- Haz clic en el ícono Develop on Kubernetes (Desarrollar en Kubernetes) y, luego, en Edit Configurations (Editar configuración) para abrir el diálogo Run/Debug Configurations.
- Personaliza la implementación mediante las opciones de configuración disponibles.
- Si quieres que Cloud Code vuelva a implementar tu aplicación automáticamente después de guardar los cambios, en Watch mode - rebuild and redeploy, selecciona Al guardar el archivo. Las aplicaciones nuevas de Kubernetes tienen seleccionada la opción A pedido de forma predeterminada. Para obtener más información sobre los modos de reloj, consulta Modos de reloj.
- Si tu aplicación está configurada para usar módulos de Skaffold, puedes seleccionar solo la compilación o implementación de módulos específicos.
- Cuando estés conforme con la configuración, haz clic en OK y, luego, en el ícono Run.
¿Qué sigue?
- Usa el clúster de minikube integrado de Cloud Code para el desarrollo local.
- Depura tu aplicación en Cloud Code
- Consulta los detalles sobre la función de sincronización de archivos de Skaffold.