La page Intégration continue de la section Plate-forme du menu Admin vous permet de configurer les paramètres de la fonctionnalité 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 permet d'éviter les erreurs de requête et d'identifier les problèmes liés au code SQL, aux tests de données, au contenu et au LookML avant qu'ils n'atteignent la production. Vous pouvez également configurer des validateurs d'intégration continue pour qu'ils s'exécutent automatiquement lorsqu'une demande d'extraction'extraction est envoyée à votre dépôt LookML, ce qui simplifie votre workflow de développement.
Fonctionnalités de conformité de l'intégration continue
Looker CI n'est pas inclus dans les limites d'autorisation FedRAMP au niveau d'impact élevé, FedRAMP au niveau d'impact modéré ou DoD au niveau d'impact 5 (IL5).
Avant d'activer le paramètre Looker CI pour votre instance Looker, consultez votre organisme d'autorisation pour déterminer si les offres de conformité de Looker CI répondent aux exigences spécifiques de votre organisation en matière de sécurité et de réglementation.
Pour les instances Looker (Google Cloud Core), chaque package de contrôles Assured Workloads qui devient disponible ajoute les fonctionnalités Looker CI en tant qu'offres par défaut, une fois que les exigences et les processus de modification de ce package sont respectés.
Activer l'intégration continue
La fonctionnalité Intégration continue (CI) de Looker vous permet d'exécuter des tests sur votre projet LookML afin de proposer 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 au code SQL, aux tests de données, au contenu et à LookML avant qu'ils n'atteignent la production. Vous pouvez ainsi vérifier votre code LookML et éviter les erreurs de requête pour vos utilisateurs. Vous pouvez également configurer les validateurs CI pour qu'ils s'exécutent automatiquement selon un planning 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 Looker CI
Lorsque vous activez l'intégration continue sur votre instance, Looker crée automatiquement 10 utilisateurs CI Looker dans le groupe d'utilisateurs CI Looker avec le rôle Utilisateurs CI Looker. Un administrateur Looker peut afficher les utilisateurs de l'intégration continue 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 de l'intégration continue de Looker doivent être inclus dans ces autorisations d'accès. Vous pouvez inclure les utilisateurs de l'intégration continue en attribuant les valeurs d'attribut utilisateur appropriées au groupe Utilisateurs de l'intégration continue 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 CI 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 (utiliser l'application GitHub Looker CI)
- GitLab (utiliser l'API Looker et GitLab CI)
- Bitbucket (utiliser l'API Looker et Bitbucket Pipelines)
- GitHub Actions (utiliser l'API Looker et GitHub Actions)
GitHub
Si vous disposez d'un dépôt GitHub basé sur le cloud comme dépôt distant pour votre projet LookML, vous pouvez configurer l'intégration continue pour exécuter automatiquement des suites CI lorsque les développeurs LookML envoient des demandes d'extraction à votre dépôt LookML.
Pour les instances Looker (Google Cloud Core) qui utilisent des connexions privées ou des connexions hybrides avec Private Service Connect, ou pour les instances situées dans un périmètre VPC Service Controls, votre configuration réseau doit autoriser le trafic entrant et sortant vers et depuis GitHub. Dans la plupart des cas, cette configuration réseau est déjà définie lorsque vous configurez votre instance Looker (Google Cloud Core) pour qu'elle se connecte à GitHub. Pour en savoir plus sur la configuration des connexions sortantes, consultez la page de documentation Accès sortant de Looker (Google Cloud Core) aux services externes à l'aide de Private Service Connect.
Pour exécuter automatiquement des suites d'intégration continue dans 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 des commits, 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 d'extraction pour les exécutions CI, votre projet LookML doit être configuré avec une connexion Git (comme décrit sur la page Configurer et tester une connexion Git). Vous devez également configurer l'application GitHub CI, comme décrit dans la section Configurer l'application GitHub CI.
Table GitHub
Le tableau GitHub sur 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 CI :
- Installé : le dépôt a reçu l'application GitHub CI Looker, qui permet d'exécuter automatiquement l'intégration continue lorsque les développeurs LookML envoient des demandes d'extraction à votre dépôt LookML.
- Non installé : le dépôt n'a pas été configuré pour l'intégration des demande d'extraction d'extraction avec Looker CI. Pour configurer le dépôt pour l'intégration des demande d'extraction'extraction CI, consultez la section Configurer l'application GitHub CI.
Configurer l'application GitHub CI
Pour accorder l'accès à l'application GitHub CI pour un dépôt, procédez comme suit :
- 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.
- Sélectionnez le compte GitHub dans lequel votre LookML est stocké.
- Dans la section Repository access (Accès aux dépôts), sélectionnez All repositories (Tous les dépôts) pour autoriser les intégrations CI pour tous les dépôts Git appartenant au propriétaire de la ressource, ou sélectionnez Only select repositories (Uniquement certains dépôts) pour choisir les dépôts avec lesquels vous souhaitez utiliser l'intégration continue.
- Cliquez sur Enregistrer.
Si l'application GitHub Looker CI 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 Looker à partir de GitLab CI en utilisant l'API Looker et le SDK Python Looker officiel (looker-sdk).
Pour déclencher une exécution CI Looker à partir d'un pipeline GitLab CI, procédez comme suit :
- Configurez les variables CI/CD dans GitLab.
- Créez le script Python pour GitLab CI.
- 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 dans LookerLOOKERSDK_CLIENT_SECRET: code secret du client API3 correspondant généré sur 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 de l'IC et interroger jusqu'à ce qu'elle se termine :
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 CI que vous souhaitez exécuter
Bitbucket
Vous pouvez déclencher des exécutions d'intégration continue Looker à partir de Bitbucket Pipelines en utilisant l'API Looker et le SDK Looker officiel pour Python (looker-sdk).
Pour déclencher une exécution de l'intégration continue Looker à partir de Bitbucket Pipelines, procédez comme suit :
- Configurez les variables de dépôt dans Bitbucket.
- Créez le script Python pour Bitbucket Pipelines.
- Configurez le workflow Bitbucket Pipelines.
Configurer des variables de dépôt dans Bitbucket
Dans votre dépôt Bitbucket, accédez à 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ée 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 dans LookerLOOKERSDK_CLIENT_SECRET: code secret du client API3 correspondant généré sur 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 de l'IC et interroger jusqu'à ce qu'elle se termine :
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 CI que vous souhaitez exécuter
GitHub Actions
Vous pouvez déclencher des exécutions d'intégration continue Looker à partir de GitHub Actions en utilisant l'API Looker et le SDK Looker officiel pour Python (looker-sdk).
Pour déclencher une exécution de l'intégration continue Looker à partir d'un workflow GitHub Actions, procédez comme suit :
- Configurez les secrets du dépôt dans GitHub.
- Créez le script Python pour GitHub Actions.
- Configurez le workflow GitHub Actions.
Configurer les secrets du dépôt dans GitHub
Dans votre dépôt GitHub, accédez à Settings > Secrets and variables > Actions (Paramètres > Secrets et variables > Actions), puis 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 dans LookerLOOKERSDK_CLIENT_SECRET: code secret du client API3 correspondant généré sur 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 de l'IC et interroger jusqu'à ce qu'elle se termine :
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 CI que vous souhaitez exécuter
Configuration dbt Cloud
Si vous utilisez dbt Cloud, vous pouvez configurer l'intégration continue pour exécuter automatiquement les suites CI lorsqu'un job dbt Cloud CI est terminé. L'exécution de la suite CI permet de s'assurer que les modifications apportées à vos modèles dbt ne cassent pas votre projet LookML.
Pour configurer l'intégration dbt Cloud, suivez ces étapes dans la section Configuration dbt Cloud :
- Dans le champ URL de l'hôte dbt Cloud, saisissez l'URL de votre compte dbt Cloud.
- Dans le champ Clé API dbt Cloud, saisissez un jeton de compte de service dbt Cloud.
- Cliquez sur Test Connection (Tester la connexion). Looker vérifiera qu'il peut se connecter à votre compte dbt Cloud, puis récupérera votre ID de compte dbt Cloud.
- 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 orienter Looker vers les schémas temporaires créés par les jobs dbt Cloud CI.
Pour configurer les attributs utilisateur par défaut pour l'identité client, procédez comme suit dans la section Attributs utilisateur :
- 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 CI.
- Dans le champ Valeur pour l'exécution CI, saisissez la valeur à utiliser avec cet attribut utilisateur pour les exécutions CI.
- 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 vos configurations CI Suite.
Pour supprimer une paire attribut/valeur utilisateur, cliquez sur Supprimer.