Uso y flujo de trabajo de CI/CD de Looker de varios niveles

En esta página, se explica cómo usar un flujo de trabajo de CI/CD de varios niveles en Looker después de que se instaló y configuró dicho flujo de trabajo.

En estas instrucciones, se usa un sistema de tres niveles que incluye desarrollo, QA y producción. Sin embargo, puedes aplicar los mismos principios a un sistema de dos o cuatro niveles.

En estas instrucciones, también se supone que usas GitHub como tu proveedor de Git. Puedes usar otros proveedores de Git para crear un flujo de trabajo de CI/CD. Sin embargo, debes tener la experiencia necesaria para modificar estas instrucciones según tu proveedor.

Descripción general del flujo de trabajo

Los desarrolladores de LookML comienzan escribiendo código en su rama de desarrollo, que normalmente se llama algo como dev-my-user-ydnv, prueban sus cambios con la integración continua de Looker (o ejecutando manualmente un conjunto de pruebas de CI) y confirman su código. Por último, abren una solicitud de extracción para combinar su código con la rama main.

Cuando se abre la solicitud de extracción, se dirige al desarrollador a GitHub. El desarrollador debe escribir un título significativo para la solicitud de extracción con el estilo de confirmaciones convencionales y agregar un comentario a la descripción que se incluirá en el registro de cambios. Si se configura el activador de solicitudes de extracción, la integración continua de Looker valida automáticamente la solicitud de extracción, y los desarrolladores pueden ver los resultados en Looker o en GitHub.

A continuación, el desarrollador debe seleccionar un revisor en GitHub. El revisor recibirá una notificación y podrá agregar su revisión a la PR. Si el revisor aprueba el cambio, la PR se combina con la rama main. Se llama a un webhook y el entorno de desarrollo ahora ve el cambio.

Automáticamente, se ejecutará la automatización de Release Please y se abrirá una segunda solicitud de extracción para crear una nueva versión etiquetada. O bien, si ya hay una PR abierta para este propósito, Release Please la actualiza. La RP de la versión tiene un número de versión asociado, así como un registro de cambios que incluye los títulos y las descripciones de los cambios incluidos.

Cuando se aprueba y se combina la PR generada por Release Please, se genera una nueva etiqueta de versión y el registro de cambios se combina con la rama main. Las instancias de QA y producción de Looker pueden seleccionar esta versión con el Modo de implementación avanzado.

Prácticas recomendadas para numerar versiones y nombrar confirmaciones

Las versiones y sus etiquetas asociadas se pueden nombrar y numerar de cualquier manera que tenga sentido en tu entorno. Sin embargo, aquí se usa el control de versiones semántico, que se recomienda mucho porque funciona bien con el complemento Release Please.

En el control de versiones semántico, la versión consta de tres números separados por puntos: MAJOR.MINOR.PATCH

  • PATCH se incrementa cada vez que una versión corrige un error.
  • MINOR se incrementa y PATCH se restablece a cero cada vez que la versión agrega o perfecciona una función y, al mismo tiempo, es retrocompatible.
  • MAJOR se incrementa y MINOR y PATCH se establecen en cero cuando se agrega una función que no es retrocompatible.

Conventional Commits es un sistema para nombrar las confirmaciones según el impacto que tienen en los usuarios finales. Si bien no es obligatorio, el uso de nombres de confirmación convencionales también es útil para el complemento de Release Please.

En la nomenclatura de confirmaciones convencional, cada mensaje de confirmación se antepone con un indicador del alcance del cambio:

  • Las correcciones de errores se indican con fix:, como fix: set proper currency symbol on sale_amt format.
  • Las funciones nuevas se indican con feat:, como feat: added explore for sales by territory.
  • Las funciones con un cambio que genera interrupciones se indican con feat!:, como feat!: rewrote sales explore to use the new calendar view.
  • Cuando se actualiza la documentación, pero no se cambia LookML, el mensaje de confirmación comienza con doc:.

Si los commits convencionales se usan de forma coherente, determinar el número semántico que se usará a continuación suele ser sencillo. Si el registro de confirmaciones solo consta de confirmaciones de fix: y doc:, se debe incrementar el valor de PATCH. Si hay una confirmación de feat:, se debe incrementar MINOR. Si hay un feat!:, se debe incrementar MAJOR. El complemento Release Please incluso puede generar un archivo CHANGELOG y etiquetar la versión automáticamente.

Cómo usar el modo de implementación avanzada

Después de que se realicen los cambios y se envíen como una PR en la instancia de desarrollo, el complemento Release Please etiquetará los cambios con una etiqueta de versión como v1.2.3. Luego, el modo de implementación avanzado de Looker hace que estas versiones estén disponibles en la IU de Looker para las instancias de QA y producción.

Para implementar un cambio, elige el Administrador de implementaciones en el IDE de Looker:

Ubicación del Administrador de implementaciones de Looker en el IDE

Haz clic en el vínculo Select Commit en la parte superior derecha del Administrador de implementaciones. A continuación, selecciona el menú de tres puntos asociado con la etiqueta que deseas implementar y elige Implementar en el entorno:

IU de Looker Deployment Manager para la implementación en el entorno.

No es necesario que vuelvas a etiquetar la implementación, así que elige Implementar sin etiquetar y presiona el botón Implementar en el entorno:

IU de Looker Deployment Manager para la implementación sin etiquetado.

Por último, envía a producción con Deployment Manager.

Usa la integración continua de Looker

Para verificar los cambios en una rama de desarrollo o como parte de una solicitud de extracción, los desarrolladores pueden usar la integración continua de Looker. La integración continua proporciona los siguientes validadores:

Puedes agrupar estos validadores en paquetes de integración continua y ejecutarlos automáticamente en solicitudes de extracción, según un programa o de forma manual.

Validador de SQL

El validador de SQL de integración continua verifica que las dimensiones de tus Explorar se ejecuten correctamente en tu base de datos. Comprueba si los campos definidos en las vistas de LookML corresponden a columnas o expresiones de SQL válidas en la base de datos.

El validador de SQL tiene las siguientes capacidades clave:

Para obtener más información y opciones de configuración, consulta la página de documentación del Validador de SQL de integración continua.

Validador de LookML

El validador de LookML de integración continua verifica si hay errores de sintaxis en tu proyecto de LookML, como corchetes faltantes o referencias de campos no válidas. Este validador es especialmente útil para los desarrolladores que escriben LookML fuera del IDE de Looker.

El validador de LookML tiene las siguientes capacidades clave:

  • Te permite establecer un umbral de gravedad (Error, Advertencia o Información) que determina qué nivel de gravedad del mensaje provoca que falle una ejecución.
  • Te permite configurar una duración de tiempo de espera para las ejecuciones de validación.

Para obtener más información y opciones de configuración, consulta la página de documentación del Validador de LookML de integración continua.

Validador de contenido

El Validador de contenido de integración continua verifica que el contenido guardado, como las Looks y los paneles definidos por el usuario (UDD), siga funcionando correctamente después de que se realicen cambios en LookML.

El Validador de contenido tiene las siguientes capacidades clave:

Para obtener más información y opciones de configuración, consulta la página de documentación del Validador de contenido de integración continua.

Validador de aserciones

El validador de aserciones de integración continua ejecuta pruebas de datos de LookML que se definen en tu proyecto para verificar la lógica del modelo y la integridad de los datos.

Por ejemplo, una prueba de datos de LookML podría verse de la siguiente manera:

test: historic_revenue_is_accurate {
  explore_source: orders {
    column: total_revenue { field: orders.total_revenue }
    filters: [orders.created_date: "2024"]
  }
  assert: revenue_is_expected_value {
    expression: ${orders.total_revenue} = 626000 ;;
  }
}

El validador de aserciones tiene las siguientes capacidades clave:

Para obtener más información y opciones de configuración, consulta la página de documentación del validador de aserciones de integración continua.

Administración y ejecución de paquetes de CI

Para administrar y ejecutar pruebas de integración continua, sigue estos pasos:

De forma predeterminada, las vistas y los paneles reciben IDs numéricos ascendentes que se usan en la URL de la vista o el panel. Sin embargo, no hay forma de mantenerlos sincronizados en todos los sistemas. Por lo tanto, la URL de un panel específico en desarrollo no apuntará al mismo panel en QA o producción.

En el caso de los UDD, existe la opción de usar un slug en lugar de un ID como parte de la URL. El slug es un conjunto de caracteres semi aleatorio en lugar de un número. El slug se puede establecer como parte de la importación, de modo que una URL similar pueda apuntar al mismo UDD en el desarrollo, el control de calidad y la producción. Usar slugs en lugar de IDs es una práctica recomendada, en especial cuando se hace clic para acceder a una UDD desde Look o desde otra UDD.

Puedes encontrar el slug si inspeccionas el resultado de gzr dashboard cat. El slug se puede usar en la URL del panel en lugar del ID numérico.

Migra contenido del usuario con Gazer

A menudo, es útil copiar contenido, como Looks y paneles, entre los entornos de desarrollo, QA y producción. Es posible que desees producir contenido que muestre las nuevas incorporaciones de LookML o verificar que el contenido guardado siga funcionando correctamente después de los cambios en LookML. En estas situaciones, se puede usar Gazer para copiar contenido entre instancias.

Paneles de LookML

Los paneles de LookML se sincronizan entre las instancias durante el flujo de trabajo habitual de CI/CD de LookML. Sin embargo, si alguna UDD está sincronizada con los paneles de LookML, se puede actualizar con Gazer usando el siguiente comando:

gzr dashboard sync_lookml DASHBOARD_ID --host TARGET_SYSTEM_URL

Paneles definidos por el usuario

Los paneles definidos por el usuario (UDD) se pueden migrar con Gazer haciendo referencia al ID del panel y a la URL de la instancia de Looker en la que reside el UDD. Gazer guarda la configuración del panel en un archivo JSON que luego se importa a la instancia de Looker de destino.

El comando para extraer la configuración de UDD es el siguiente:

gzr dashboard cat DASHBOARD_ID --host TARGET_SYSTEM_URL --dir .

Esto generará un archivo llamado Dashboard_DASHBOARD_ID_DASHBOARD_NAME.json que contiene la configuración del panel.

El UDD se puede importar al sistema de destino con el siguiente comando:

gzr dashboard import Dashboard_DASHBOARD_ID_DASHBOARD_NAME.json FOLDER_ID \
    --host TARGET_SYSTEM_URL

Vistas

La migración de aspecto funciona de manera muy similar a la migración de UDD. Primero, usa Gazer para guardar la configuración de Look en un archivo JSON:

gzr look cat LOOK_ID --host SOURCE_SYSTEM_URL --dir .

Luego, importa el Look a la instancia de destino:

gzr look import Look_LOOK_ID_LOOK_NAME.json FOLDER_ID \
    --host TARGET_SYSTEM_URL