Paramètres d'administration - Intégration continue

La page Intégration continue de la section Plate-forme du menu Admin vous permet de configurer les paramètres de la fonctionnalité d'intégration continue (CI) de Looker. Configurez les paramètres d'intégration continue de Looker (Google Cloud Core) pour garantir la qualité et la fiabilité de vos projets LookML. L'intégration continue empêche les erreurs de requête et identifie les problèmes liés à SQL, aux tests de données, au contenu et à LookML avant qu'ils n'atteignent la production. Vous pouvez également configurer les validateurs d'intégration continue pour qu'ils s'exécutent automatiquement lorsqu'une demande d'extraction est envoyée à votre dépôt LookML, ce qui simplifie votre workflow de développement.

Capacités de conformité de l'intégration continue

L'intégration continue de Looker n'est pas incluse dans les limites d'autorisation FedRAMP High, FedRAMP Moderate ni DoD Impact Level 5 (IL5).

Avant d'activer le paramètre d'intégration continue de Looker pour votre instance Looker, consultez votre organisme d'autorisation pour déterminer si les offres de conformité de l'intégration continue de Looker répondent aux exigences spécifiques de sécurité et réglementaires de votre organisation.

Pour les instances Looker (Google Cloud Core), chaque package de contrôle Assured Workloads qui devient disponible ajoute des fonctionnalités d'intégration continue de Looker en tant qu'offres par défaut, à mesure que les exigences et les processus de modification de ce package sont respectés.

Activer l'intégration continue

La fonctionnalité d'intégration continue (CI) de Looker vous permet d'exécuter des tests sur votre projet LookML afin d'offrir des expériences de données plus fiables, efficaces et conviviales. Vous pouvez utiliser les validateurs d'intégration continue pour identifier les problèmes liés à SQL, aux tests de données, au contenu et à LookML avant qu'ils n'atteignent la production afin de vérifier votre LookML et d'éviter les erreurs de requête pour vos utilisateurs. Vous pouvez également configurer les validateurs d'intégration continue pour qu'ils s'exécutent automatiquement selon un calendrier ou lorsqu'une demande d'extraction est envoyée à votre dépôt LookML.

Un administrateur Looker peut utiliser le bouton Activer l'intégration continue pour activer l'intégration continue sur votre instance.

Utilisateurs d'intégration continue de Looker

Lorsque vous activez l'intégration continue sur votre instance, Looker crée automatiquement 10 utilisateurs d'intégration continue de Looker dans le groupe d'utilisateurs Utilisateurs d'intégration continue de Looker avec le rôle Utilisateurs d'intégration continue de Looker. Un administrateur Looker peut afficher les utilisateurs d'intégration continue de Looker dans l'onglet Comptes de service de la page d'administration Utilisateurs.

Si votre instance utilise des autorisations d'accès pour contrôler l'accès aux explorations, les utilisateurs d'intégration continue de Looker doivent être inclus dans ces autorisations d'accès. Vous pouvez inclure les utilisateurs d'intégration continue en attribuant les valeurs d'attribut utilisateur appropriées au groupe Utilisateurs d'intégration continue de Looker, comme décrit sur la page de documentation Paramètres d'administration – Attributs utilisateur.

Intégrations

L'intégration continue vous permet d'exécuter automatiquement des suites d'intégration continue lorsque des demandes d'extraction ou des commits se produisent dans votre dépôt Git distant. Vous pouvez configurer l'intégration continue pour qu'elle s'intègre aux fournisseurs Git suivants :

  • GitHub (utilisez l'application GitHub d'intégration continue de Looker)
  • GitLab (utilisez l'API Looker et GitLab CI)
  • Bitbucket (utilisez l'API Looker et Bitbucket Pipelines)
  • GitHub Actions (utilisez l'API Looker et GitHub Actions)

GitHub

Si vous disposez d'un dépôt GitHub basé sur le cloud en tant que dépôt distant pour votre projet LookML, vous pouvez configurer l'intégration continue pour qu'elle exécute automatiquement des suites d'intégration continue lorsque les développeurs LookML envoient des demandes d'extraction à votre dépôt LookML.

Pour exécuter automatiquement des suites d'intégration continue sur votre dépôt, l'intégration continue a besoin des autorisations suivantes :

  • Accès en lecture aux métadonnées et aux demandes d'extraction de votre dépôt
  • Accès en lecture et en écriture aux états de commit, aux hooks de dépôt et aux workflows de votre dépôt

Ces autorisations ne sont pas configurées lorsque vous configurez une connexion Git pour votre projet LookML dans l'IDE Looker. Si vous souhaitez utiliser le déclenchement de demande d'extraction pour les exécutions d'intégration continue, votre projet LookML doit être configuré avec une connexion Git (comme décrit sur la page Configurer et tester une connexion Git), et vous devez également configurer l'application GitHub d'intégration continue comme décrit dans la section Configurer l'application GitHub d'intégration continue.

Tableau GitHub

Le tableau GitHub de la page d'administration Intégration continue liste les dépôts GitHub configurés pour les projets LookML de votre instance Looker. Ces dépôts GitHub ont été configurés par vos développeurs LookML, comme décrit sur la page de documentation Configurer et tester une connexion Git.

Pour chaque dépôt GitHub listé, le tableau indique si le dépôt a été configuré avec l'application GitHub d'intégration continue :

Configurer l'application GitHub d'intégration continue

Pour accorder l'application GitHub d'intégration continue à un dépôt, procédez comme suit :

  1. Sur la page d'administration Intégration continue de Looker, cliquez sur le bouton Configurer l'application GitHub. Une fenêtre de navigateur s'ouvre sur la page Web des applications GitHub.
  2. Sélectionnez le compte GitHub où votre LookML est stocké.
  3. Dans la section Accès aux dépôts, sélectionnez Tous les dépôts pour autoriser les intégrations d'intégration continue pour tous les dépôts Git appartenant au propriétaire de la ressource, ou sélectionnez Uniquement certains dépôts pour choisir les dépôts avec lesquels vous souhaitez utiliser l'intégration continue.
  4. Cliquez sur Enregistrer.

Si l'application GitHub d'intégration continue de Looker est correctement accordée au dépôt, Looker affiche Installé pour le dépôt dans le tableau GitHub de la page d'administration Intégration continue.

GitLab

Vous pouvez déclencher des exécutions d'intégration continue de Looker à partir de GitLab CI à l'aide de l'API Looker et du SDK Python Looker officiel (looker-sdk).

Pour déclencher une exécution d'intégration continue de Looker à partir d'un pipeline GitLab CI, procédez comme suit :

  1. Configurez les variables CI/CD dans GitLab.
  2. Créez le script Python pour GitLab CI.
  3. Configurez le workflow GitLab CI.

Configurer les variables CI/CD dans GitLab

Dans votre projet GitLab, accédez à Settings > CI/CD > Variables (Paramètres > CI/CD > Variables) et créez les variables CI/CD suivantes. Définissez chaque variable sur Masqué pour protéger les valeurs sensibles :

  • LOOKERSDK_BASE_URL : URL de l'API de votre instance Looker (par exemple, https://example.cloud.looker.com)
  • LOOKERSDK_CLIENT_ID : ID client API3 généré à partir de la page d'administration Utilisateurs de Looker
  • LOOKERSDK_CLIENT_SECRET : code secret du client API3 correspondant généré à partir de la page d'administration Utilisateurs de Looker

Créer le script Python pour GitLab CI

Créez un script Python nommé run_looker_ci.py dans votre dépôt. Ce script utilise le SDK Looker pour déclencher l'exécution d'intégration continue et interroger jusqu'à la fin de l'exécution :

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!")

Configurer le workflow GitLab CI

Dans le répertoire racine de votre dépôt, créez ou mettez à jour votre fichier de configuration de pipeline .gitlab-ci.yml pour installer looker-sdk et exécuter 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"

Remplacez les éléments suivants :

  • LOOKER_PROJECT_ID : ID du projet Looker que vous souhaitez tester
  • LOOKER_SUITE_ID : ID de la suite d'intégration continue que vous souhaitez exécuter

Bitbucket

Vous pouvez déclencher des exécutions d'intégration continue de Looker à partir de Bitbucket Pipelines à l'aide de l'API Looker et du SDK Python Looker officiel (looker-sdk).

Pour déclencher une exécution d'intégration continue de Looker à partir de Bitbucket Pipelines, procédez comme suit :

  1. Configurez les variables de dépôt dans Bitbucket.
  2. Créez le script Python pour Bitbucket Pipelines.
  3. Configurez le workflow Bitbucket Pipelines.

Configurer les variables de dépôt dans Bitbucket

Dans votre dépôt Bitbucket, accédez à Repository settings > Repository variables (Paramètres du dépôt > Variables du dépôt) et créez les variables de dépôt suivantes. Définissez chaque variable sur Sécurisé pour protéger les valeurs sensibles :

  • LOOKERSDK_BASE_URL : URL de l'API de votre instance Looker (par exemple, https://example.cloud.looker.com)
  • LOOKERSDK_CLIENT_ID : ID client API3 généré à partir de la page d'administration Utilisateurs de Looker
  • LOOKERSDK_CLIENT_SECRET : code secret du client API3 correspondant généré à partir de la page d'administration Utilisateurs de Looker

Créer le script Python pour Bitbucket Pipelines

Créez un script Python nommé run_looker_ci.py dans votre dépôt. Ce script utilise le SDK Looker pour déclencher l'exécution d'intégration continue et interroger jusqu'à la fin de l'exécution :

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!")

Configurer le workflow Bitbucket Pipelines

Dans le répertoire racine de votre dépôt, créez ou mettez à jour votre fichier bitbucket-pipelines.yml pour installer looker-sdk et exécuter 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

Remplacez les éléments suivants :

  • LOOKER_PROJECT_ID : ID du projet Looker que vous souhaitez tester
  • LOOKER_SUITE_ID : ID de la suite d'intégration continue que vous souhaitez exécuter

GitHub Actions

Vous pouvez déclencher des exécutions d'intégration continue de Looker à partir de GitHub Actions à l'aide de l'API Looker et du SDK Python Looker officiel (looker-sdk).

Pour déclencher une exécution d'intégration continue de Looker à partir d'un workflow GitHub Actions, procédez comme suit :

  1. Configurez les secrets de dépôt dans GitHub.
  2. Créez le script Python pour GitHub Actions.
  3. Configurez le workflow GitHub Actions.

Configurer les secrets de dépôt dans GitHub

Dans votre dépôt GitHub, accédez à Settings > Secrets and variables > Actions (Paramètres > Secrets et variables > Actions) et créez les secrets de dépôt suivants :

  • LOOKERSDK_BASE_URL : URL de l'API de votre instance Looker (par exemple, https://example.cloud.looker.com)
  • LOOKERSDK_CLIENT_ID : ID client API3 généré à partir de la page d'administration Utilisateurs de Looker
  • LOOKERSDK_CLIENT_SECRET : code secret du client API3 correspondant généré à partir de la page d'administration Utilisateurs de Looker

Créer le script Python pour GitHub Actions

Créez un script Python nommé run_looker_ci.py dans votre dépôt. Ce script utilise le SDK Looker pour déclencher l'exécution d'intégration continue et interroger jusqu'à la fin de l'exécution :

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!")

Configurer le workflow GitHub Actions

Dans votre dépôt, créez un fichier de workflow à l'adresse .github/workflows/looker-ci.yml avec la configuration suivante :

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

Remplacez les éléments suivants :

  • LOOKER_PROJECT_ID : ID du projet Looker que vous souhaitez tester
  • LOOKER_SUITE_ID : ID de la suite d'intégration continue que vous souhaitez exécuter

Configuration dbt Cloud

Si vous utilisez dbt Cloud, vous pouvez configurer l'intégration continue pour qu'elle exécute automatiquement des suites d'intégration continue lorsqu'un job d'intégration continue dbt Cloud se termine. L'exécution de la suite d'intégration continue permet de s'assurer que les modifications apportées à vos modèles dbt n'interrompent pas votre projet LookML.

Pour configurer l'intégration dbt Cloud, procédez comme suit dans la section Configuration dbt Cloud :

  1. Dans le champ URL de l'hôte dbt Cloud, saisissez l'URL de votre compte dbt Cloud.
  2. Dans le champ Clé API dbt Cloud, saisissez un jeton de compte de service dbt Cloud.
  3. Cliquez sur Test Connection (Tester la connexion). Looker vérifie qu'il peut se connecter à votre compte dbt Cloud, puis récupère votre ID de compte dbt Cloud.
  4. Cliquez sur Enregistrer.

Attributs utilisateur

Vous pouvez configurer des attributs utilisateur que l'intégration continue peut remplacer lors des exécutions de validation. Les attributs utilisateur sont utilisés conjointement avec l'intégration dbt Cloud pour pointer Looker vers les schémas temporaires créés par les jobs d'intégration continue dbt Cloud.

Pour configurer les valeurs par défaut des attributs utilisateur pour l'intégration continue, procédez comme suit dans la section Attributs utilisateur :

  1. Dans le champ Attribut utilisateur, sélectionnez un attribut utilisateur dans la liste déroulante. Si aucun attribut utilisateur n'est sélectionné, Looker utilise l'attribut utilisateur défini dans le champ Ensemble de données principal de votre connexion à la base de données pour les exécutions d'intégration continue.
  2. Dans le champ Valeur pour l'exécution d'intégration continue, saisissez la valeur à utiliser avec cet attribut utilisateur pour les exécutions d'intégration continue.
  3. Cliquez sur Enregistrer.

Vous pouvez ajouter plusieurs paires d'attributs et de valeurs utilisateur. Chaque attribut utilisateur configuré dans la section Attributs utilisateur pourra être sélectionné comme remplacement dans les configurations de votre suite d'intégration continue.

Pour supprimer une paire d'attributs et de valeurs utilisateur, cliquez sur Supprimer.