Configuración del administrador: Integración continua

La página Integración continua de la sección Plataforma del menú Administrador te permite configurar los parámetros de configuración de la función Integración continua (CI) de Looker. Configura los parámetros de CI de Looker (Google Cloud Core) para garantizar la calidad y la confiabilidad de tus proyectos de LookML. La CI evita errores en las consultas y detecta problemas con SQL, pruebas de datos, contenido y LookML antes de que lleguen a producción. También puedes configurar validadores de CI para que se ejecuten automáticamente cuando se envíe una solicitud de extracción a tu repositorio de LookML, lo que optimizará tu flujo de trabajo de desarrollo.

Capacidades de cumplimiento de la integración continua

La CI de Looker no se incluye en los límites de autorización de FedRAMP High, FedRAMP Moderate o DoD Impact Level 5 (IL5).

Antes de habilitar el parámetro de configuración de la CI de Looker para tu instancia de Looker, consulta con tu organismo de autorización para determinar si las ofertas de cumplimiento de la CI de Looker satisfacen los requisitos de seguridad y reglamentarios específicos de tu organización.

En el caso de las instancias de Looker (Google Cloud Core), cada paquete de controles de Assured Workloads que esté disponible agregará funciones de CI de Looker como ofertas predeterminadas a medida que se cumplan los requisitos y procesos de cambio de ese paquete.

Habilitar la integración continua

La función de integración continua (CI) de Looker te permite ejecutar pruebas en tu proyecto de LookML para ofrecer experiencias de datos más confiables, eficientes y fáciles de usar. Puedes usar los validadores de CI para identificar problemas con SQL, pruebas de datos, contenido y LookML antes de que lleguen a producción, verificar tu LookML y evitar errores de consultas para tus usuarios. También puedes configurar los validadores de CI para que se ejecuten automáticamente según un programa o cuando se envíe una solicitud de extracción a tu repositorio de LookML.

Un administrador de Looker puede usar el botón de activación Habilitar la integración continua para habilitar la CI en tu instancia.

Usuarios de la CI de Looker

Cuando habilitas la integración continua en tu instancia, Looker crea automáticamente 10 usuarios de Looker CI en el grupo de usuarios Looker CI Users con el rol Looker CI Users. Un administrador de Looker puede ver los usuarios de la CI de Looker en la pestaña Cuentas de servicio de la Página de administrador de Usuarios.

Si tu instancia usa otorgamientos de acceso para controlar el acceso a los Explorar, los usuarios de la CI de Looker deben incluirse en esos otorgamientos de acceso. Para incluir a los usuarios de CI, asigna los valores de atributos de usuario pertinentes al grupo Usuarios de CI de Looker, como se describe en la página de documentación Configuración del administrador: Atributos de usuario.

Integraciones

La integración continua te permite ejecutar paquetes de CI automáticamente cuando se producen solicitudes de extracción o confirmaciones en tu repositorio remoto de Git. Puedes configurar la integración continua para que se integre con los siguientes proveedores de Git:

  • GitHub (usa la app de GitHub de CI de Looker)
  • GitLab (usa la API de Looker y GitLab CI)
  • Bitbucket (usa la API de Looker y Bitbucket Pipelines)
  • Acciones de GitHub (usa la API de Looker y las acciones de GitHub)

GitHub

Si tienes un repositorio de GitHub basado en la nube como repositorio remoto para tu proyecto de LookML, puedes configurar la integración continua para ejecutar automáticamente paquetes de CI cuando los desarrolladores de LookML envíen solicitudes de extracción a tu repositorio de LookML.

En el caso de las instancias de Looker (Google Cloud Core) que usan conexiones privadas o conexiones híbridas con Private Service Connect, o bien para las instancias dentro de un perímetro de Controles del servicio de VPC, tu configuración de redes debe permitir el tráfico de entrada y salida hacia y desde GitHub. En la mayoría de los casos, esta configuración de redes ya está establecida cuando configuras tu instancia de Looker (Google Cloud Core) para conectarte a GitHub. Para obtener más información sobre la configuración de conexiones salientes, consulta la página de documentación Acceso saliente de Looker (Google Cloud Core) a servicios externos con Private Service Connect.

Para ejecutar automáticamente los conjuntos de pruebas de CI en tu repositorio, la integración continua necesita los siguientes permisos:

  • Acceso de lectura a los metadatos y las solicitudes de extracción de tu repositorio
  • Acceso de lectura y escritura a los estados de confirmación, los hooks y los flujos de trabajo del repositorio

Estos permisos no se configuran cuando estableces una conexión de Git para tu proyecto de LookML en el IDE de Looker. Si deseas usar la activación de solicitud de extracción para las ejecuciones de CI, tu proyecto de LookML debe configurarse con una conexión de Git (como se describe en la página Cómo configurar y probar una conexión de Git), y también debes configurar la app de GitHub de CI como se describe en la sección Cómo configurar la app de GitHub de CI.

Tabla de GitHub

En la tabla GitHub de la página de administrador de Integración continua, se enumeran los repositorios de GitHub que están configurados para los proyectos de LookML en tu instancia de Looker. Tus desarrolladores de LookML configuraron estos repositorios de GitHub como se describe en la página de documentación Configura y prueba una conexión de Git.

En el caso de cada repositorio de GitHub que se muestra en la lista, la tabla indica si se configuró con la app de GitHub de CI:

Cómo configurar la app de GitHub de CI

Para otorgar acceso a la aplicación de GitHub de CI para un repositorio, sigue estos pasos:

  1. En la Página de administrador de Integración continua en Looker, haz clic en el botón Configurar la app de GitHub. Se abrirá una ventana del navegador en la página web de las apps de GitHub.
  2. Selecciona la cuenta de GitHub en la que se almacena tu LookML.
  3. En la sección Acceso al repositorio, selecciona Todos los repositorios para permitir las integraciones de CI para todos los repositorios de Git que pertenecen al propietario del recurso, o bien selecciona Solo repositorios seleccionados para elegir los repositorios con los que deseas usar la integración continua.
  4. Haz clic en Guardar.

Si la aplicación de GitHub de CI de Looker se otorga correctamente al repositorio, Looker mostrará Instalada para el repositorio en la tabla de GitHub en la Página de administrador de Integración continua.

GitLab

Puedes activar ejecuciones de integración continua de Looker desde GitLab CI con la API de Looker y el SDK oficial de Looker para Python (looker-sdk).

Para activar una ejecución de CI de Looker desde una canalización de CI de GitLab, completa los siguientes pasos:

  1. Configura variables de CI/CD en GitLab.
  2. Crea la secuencia de comandos de Python para GitLab CI.
  3. Configura el flujo de trabajo de GitLab CI.

Configura variables de CI/CD en GitLab

En tu proyecto de GitLab, ve a Settings > CI/CD > Variables y crea las siguientes variables de CI/CD. Establece cada variable en Masked para proteger los valores sensibles:

  • LOOKERSDK_BASE_URL: Es la URL de la API de tu instancia de Looker (por ejemplo, https://example.cloud.looker.com).
  • LOOKERSDK_CLIENT_ID: Es el ID de cliente de API3 generado en la Página de administrador de Usuarios en Looker.
  • LOOKERSDK_CLIENT_SECRET: Es el secreto del cliente de API3 correspondiente que se generó en la Página de administrador de Usuarios en Looker.

Crea la secuencia de comandos de Python para la CI de GitLab

Crea una secuencia de comandos de Python llamada run_looker_ci.py en tu repositorio. Esta secuencia de comandos usa el SDK de Looker para activar la ejecución de CI y sondear hasta que finalice la ejecución:

import os
import sys
import time
import looker_sdk
from looker_sdk import models as mdls

# Retrieve required settings from environment variables
project_id = os.getenv("LOOKER_PROJECT_ID")
suite_id = os.getenv("LOOKER_SUITE_ID")

# GitLab CI specific environment variables
branch = os.getenv("CI_COMMIT_REF_NAME")
commit = os.getenv("CI_COMMIT_SHA")

if not all([project_id, suite_id, branch, commit]):
    print("Error: Missing required environment variables (LOOKER_PROJECT_ID, LOOKER_SUITE_ID, or GitLab vars).")
    sys.exit(1)

# Initialize the Looker SDK.
# The SDK automatically picks up LOOKERSDK_BASE_URL, LOOKERSDK_CLIENT_ID, and LOOKERSDK_CLIENT_SECRET.
print("Initializing Looker SDK...")
try:
    sdk = looker_sdk.init40()
except Exception as e:
    print(f"Failed to initialize Looker SDK: {e}")
    sys.exit(1)

# Configure the request body
print(f"Starting Looker CI run for project '{project_id}', suite '{suite_id}'...")
print(f"Branch: {branch} | Commit: {commit}")

request_body = mdls.CreateContinuousIntegrationRunRequest(
    suite_id=suite_id,
    branch=branch,
    commit=commit
)

# Trigger the CI run
try:
    run = sdk.create_continuous_integration_run(
        project_id=project_id,
        body=request_body
    )
    run_id = getattr(run, "run_id", getattr(run, "id", None))
    print(f"Looker CI run created successfully. Run ID: {run_id}")
except looker_sdk.error.SDKError as e:
    print(f"Failed to create Looker CI run: {e}")
    sys.exit(1)

# Poll for completion
run_status = run.status
terminal_statuses = ["cancelled", "error", "passed", "failed"]

while run_status not in terminal_statuses:
    print(f"Run {run_id} status is '{run_status}'. Waiting 15 seconds...")
    time.sleep(15)
    
    try:
        run = sdk.get_continuous_integration_run(
            project_id=project_id,
            run_id=run_id
        )
        run_status = run.status
    except looker_sdk.error.SDKError as e:
        print(f"Error while polling Looker CI run status: {e}")
        sys.exit(1)

print(f"Final Looker CI run status: {run_status}")

if run_status != "passed":
    print("Looker CI run did not pass. Failing the GitLab CI job.")
    sys.exit(1)

print("Looker CI run passed successfully!")

Configura el flujo de trabajo de GitLab CI

En el directorio raíz de tu repositorio, crea o actualiza el archivo de configuración de la canalización .gitlab-ci.yml para instalar looker-sdk y ejecutar run_looker_ci.py:

stages:
  - test

looker-ci:
  stage: test
  image: python:3.10
  variables:
    LOOKER_PROJECT_ID: "LOOKER_PROJECT_ID"
    LOOKER_SUITE_ID: "LOOKER_SUITE_ID"
  script:
    - pip install looker-sdk
    - python run_looker_ci.py
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"

Reemplaza lo siguiente:

  • LOOKER_PROJECT_ID: Es el ID del proyecto de Looker que deseas probar.
  • LOOKER_SUITE_ID: Es el ID del conjunto de CI que deseas ejecutar.

Bitbucket

Puedes activar ejecuciones de integración continua de Looker desde Bitbucket Pipelines con la API de Looker y el SDK oficial de Looker para Python (looker-sdk).

Para activar una ejecución de CI de Looker desde Bitbucket Pipelines, completa los siguientes pasos:

  1. Configura variables de repositorio en Bitbucket.
  2. Crea la secuencia de comandos de Python para Bitbucket Pipelines.
  3. Configura el flujo de trabajo de Bitbucket Pipelines.

Configura variables de repositorio en Bitbucket

En tu repositorio de Bitbucket, ve a Repository settings > Repository variables y crea las siguientes variables de repositorio. Establece cada variable en Secured para proteger los valores sensibles:

  • LOOKERSDK_BASE_URL: Es la URL de la API de tu instancia de Looker (por ejemplo, https://example.cloud.looker.com).
  • LOOKERSDK_CLIENT_ID: Es el ID de cliente de API3 generado en la Página de administrador de Usuarios en Looker.
  • LOOKERSDK_CLIENT_SECRET: Es el secreto del cliente de API3 correspondiente que se genera desde la Página de administrador de Usuarios en Looker.

Crea la secuencia de comandos de Python para Bitbucket Pipelines

Crea una secuencia de comandos de Python llamada run_looker_ci.py en tu repositorio. Esta secuencia de comandos usa el SDK de Looker para activar la ejecución de CI y sondear hasta que finalice la ejecución:

import os
import sys
import time
import looker_sdk
from looker_sdk import models as mdls

# Retrieve required settings from environment variables
project_id = os.getenv("LOOKER_PROJECT_ID")
suite_id = os.getenv("LOOKER_SUITE_ID")

# Bitbucket Pipelines specific environment variables
branch = os.getenv("BITBUCKET_BRANCH")
commit = os.getenv("BITBUCKET_COMMIT")

if not all([project_id, suite_id, branch, commit]):
    print("Error: Missing required environment variables (LOOKER_PROJECT_ID, LOOKER_SUITE_ID, or Bitbucket vars).")
    sys.exit(1)

# Initialize the Looker SDK.
# The SDK automatically picks up LOOKERSDK_BASE_URL, LOOKERSDK_CLIENT_ID, and LOOKERSDK_CLIENT_SECRET.
print("Initializing Looker SDK...")
try:
    sdk = looker_sdk.init40()
except Exception as e:
    print(f"Failed to initialize Looker SDK: {e}")
    sys.exit(1)

# Configure the request body
print(f"Starting Looker CI run for project '{project_id}', suite '{suite_id}'...")
print(f"Branch: {branch} | Commit: {commit}")

request_body = mdls.CreateContinuousIntegrationRunRequest(
    suite_id=suite_id,
    branch=branch,
    commit=commit
)

# Trigger the CI run
try:
    run = sdk.create_continuous_integration_run(
        project_id=project_id,
        body=request_body
    )
    run_id = getattr(run, "run_id", getattr(run, "id", None))
    print(f"Looker CI run created successfully. Run ID: {run_id}")
except looker_sdk.error.SDKError as e:
    print(f"Failed to create Looker CI run: {e}")
    sys.exit(1)

# Poll for completion
run_status = run.status
terminal_statuses = ["cancelled", "error", "passed", "failed"]

while run_status not in terminal_statuses:
    print(f"Run {run_id} status is '{run_status}'. Waiting 15 seconds...")
    time.sleep(15)
    
    try:
        run = sdk.get_continuous_integration_run(
            project_id=project_id,
            run_id=run_id
        )
        run_status = run.status
    except looker_sdk.error.SDKError as e:
        print(f"Error while polling Looker CI run status: {e}")
        sys.exit(1)

print(f"Final Looker CI run status: {run_status}")

if run_status != "passed":
    print("Looker CI run did not pass. Failing the Bitbucket Pipeline.")
    sys.exit(1)

print("Looker CI run passed successfully!")

Configura el flujo de trabajo de Bitbucket Pipelines

En el directorio raíz de tu repositorio, crea o actualiza el archivo bitbucket-pipelines.yml para instalar looker-sdk y ejecutar run_looker_ci.py:

image: python:3.10

pipelines:
  pull-requests:
    '**':
      - step:
          name: Looker CI
          script:
            - export LOOKER_PROJECT_ID="LOOKER_PROJECT_ID"
            - export LOOKER_SUITE_ID="LOOKER_SUITE_ID"
            - pip install looker-sdk
            - python run_looker_ci.py

Reemplaza lo siguiente:

  • LOOKER_PROJECT_ID: Es el ID del proyecto de Looker que deseas probar.
  • LOOKER_SUITE_ID: Es el ID del conjunto de CI que deseas ejecutar.

Acciones de GitHub

Puedes activar ejecuciones de integración continua de Looker desde GitHub Actions con la API de Looker y el SDK oficial de Looker para Python (looker-sdk).

Para activar una ejecución de CI de Looker desde un flujo de trabajo de GitHub Actions, completa los siguientes pasos:

  1. Configura secretos del repositorio en GitHub.
  2. Crea la secuencia de comandos de Python para GitHub Actions.
  3. Configura el flujo de trabajo de GitHub Actions.

Configura secretos del repositorio en GitHub

En tu repositorio de GitHub, ve a Settings > Secrets and variables > Actions y crea los siguientes secretos del repositorio:

  • LOOKERSDK_BASE_URL: Es la URL de la API de tu instancia de Looker (por ejemplo, https://example.cloud.looker.com).
  • LOOKERSDK_CLIENT_ID: Es el ID de cliente de API3 generado en la Página de administrador de Usuarios en Looker.
  • LOOKERSDK_CLIENT_SECRET: Es el secreto del cliente de API3 correspondiente que se genera desde la Página de administrador de Usuarios en Looker.

Crea la secuencia de comandos de Python para GitHub Actions

Crea una secuencia de comandos de Python llamada run_looker_ci.py en tu repositorio. Esta secuencia de comandos usa el SDK de Looker para activar la ejecución de CI y sondear hasta que finalice la ejecución:

import os
import sys
import time
import looker_sdk
from looker_sdk import models as mdls

# Retrieve required settings from environment variables
project_id = os.getenv("LOOKER_PROJECT_ID")
suite_id = os.getenv("LOOKER_SUITE_ID")

# GitHub Actions specific environment variables
# GITHUB_HEAD_REF is the branch name for PRs. 
# GITHUB_REF_NAME can be used as a fallback for non-PR events.
branch = os.getenv("GITHUB_HEAD_REF") or os.getenv("GITHUB_REF_NAME")
# GITHUB_PR_SHA is the head commit SHA for PRs.
# GITHUB_SHA can be used as a fallback for non-PR events.
commit = os.getenv("GITHUB_PR_SHA") or os.getenv("GITHUB_SHA")

if not all([project_id, suite_id, branch, commit]):
    print("Error: Missing required environment variables (LOOKER_PROJECT_ID, LOOKER_SUITE_ID, or GitHub vars).")
    sys.exit(1)

# Initialize the Looker SDK.
# The SDK automatically picks up LOOKERSDK_BASE_URL, LOOKERSDK_CLIENT_ID, and LOOKERSDK_CLIENT_SECRET.
print("Initializing Looker SDK...")
try:
    sdk = looker_sdk.init40()
except Exception as e:
    print(f"Failed to initialize Looker SDK: {e}")
    sys.exit(1)

# Configure the request body
print(f"Starting Looker CI run for project '{project_id}', suite '{suite_id}'...")
print(f"Branch: {branch} | Commit: {commit}")

request_body = mdls.CreateContinuousIntegrationRunRequest(
    suite_id=suite_id,
    branch=branch,
    commit=commit
)

# Trigger the CI run
try:
    run = sdk.create_continuous_integration_run(
        project_id=project_id,
        body=request_body
    )
    run_id = getattr(run, "run_id", getattr(run, "id", None))
    print(f"Looker CI run created successfully. Run ID: {run_id}")
except looker_sdk.error.SDKError as e:
    print(f"Failed to create Looker CI run: {e}")
    sys.exit(1)

# Poll for completion
run_status = run.status
terminal_statuses = ["cancelled", "error", "passed", "failed"]

while run_status not in terminal_statuses:
    print(f"Run {run_id} status is '{run_status}'. Waiting 15 seconds...")
    time.sleep(15)
    
    try:
        run = sdk.get_continuous_integration_run(
            project_id=project_id,
            run_id=run_id
        )
        run_status = run.status
    except looker_sdk.error.SDKError as e:
        print(f"Error while polling Looker CI run status: {e}")
        sys.exit(1)

print(f"Final Looker CI run status: {run_status}")

if run_status != "passed":
    print("Looker CI run did not pass. Failing the GitHub Action.")
    sys.exit(1)

print("Looker CI run passed successfully!")

Configura el flujo de trabajo de GitHub Actions

En tu repositorio, crea un archivo de flujo de trabajo en .github/workflows/looker-ci.yml con la siguiente configuración:

name: Looker CI
on:
  pull_request:
    branches:
      - main

jobs:
  run-looker-ci:
    runs-on: ubuntu-latest


    env:
      # Automatically picked up by the Looker SDK
      LOOKERSDK_BASE_URL: ${{ secrets.LOOKERSDK_BASE_URL }}
      LOOKERSDK_CLIENT_ID: ${{ secrets.LOOKERSDK_CLIENT_ID }}
      LOOKERSDK_CLIENT_SECRET: ${{ secrets.LOOKERSDK_CLIENT_SECRET }}


      # Passed directly to the script
      LOOKER_PROJECT_ID: "LOOKER_PROJECT_ID"
      LOOKER_SUITE_ID: "LOOKER_SUITE_ID"
      GITHUB_PR_SHA: ${{ github.event.pull_request.head.sha }}

    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.10'

      - name: Install Dependencies
        run: |
          python -m pip install --upgrade pip
          pip install looker-sdk

      - name: Run Looker CI
        run: python run_looker_ci.py

Reemplaza lo siguiente:

  • LOOKER_PROJECT_ID: Es el ID del proyecto de Looker que deseas probar.
  • LOOKER_SUITE_ID: Es el ID del conjunto de CI que deseas ejecutar.

Configuración de dbt Cloud

Si usas dbt Cloud, puedes configurar la integración continua para ejecutar automáticamente conjuntos de pruebas de CI cuando finaliza un trabajo de CI de dbt Cloud. La ejecución del paquete de CI ayuda a garantizar que los cambios en tus modelos de dbt no interrumpan tu proyecto de LookML.

Para configurar la integración de dbt Cloud, sigue estos pasos en la sección Configuración de dbt Cloud:

  1. En el campo URL de host de dbt Cloud, ingresa la URL de tu cuenta de dbt Cloud.
  2. En el campo dbt Cloud API Key, ingresa un token de cuenta de servicio de dbt Cloud.
  3. Haz clic en Test Connection. Looker verificará que se pueda conectar a tu cuenta de dbt Cloud y, luego, recuperará tu ID de cuenta de dbt Cloud.
  4. Haz clic en Guardar.

Atributos de usuario

Puedes configurar atributos de usuario que la integración continua puede anular durante las ejecuciones de validación. Los atributos del usuario se usan junto con la integración de dbt Cloud para dirigir Looker a los esquemas temporales creados por los trabajos de CI de dbt Cloud.

Para configurar los valores predeterminados de los atributos del usuario para la CI, sigue estos pasos en la sección User Attributes:

  1. En el campo Atributo del usuario, selecciona un atributo del usuario en la lista desplegable. Si no se selecciona ningún atributo del usuario, Looker usará el atributo del usuario que se define en el campo Conjunto de datos principal de tu conexión de base de datos para las ejecuciones de CI.
  2. En el campo Value for CI run, ingresa el valor que se debe usar con este atributo del usuario para las ejecuciones de CI.
  3. Haz clic en Guardar.

Puedes agregar varios pares de atributos y valores del usuario. Cada atributo de usuario configurado en la sección Atributos de usuario estará disponible para su selección como reemplazo en tus configuraciones de CI Suite.

Para borrar un par de atributo y valor del usuario, haz clic en Quitar.