Auf der Seite Continuous Integration im Bereich Plattform des Menüs Admin können Sie die Einstellungen für die Looker-Funktion Continuous Integration (CI) konfigurieren. Konfigurieren Sie die CI-Einstellungen für Looker (Google Cloud Core), um die Qualität und Zuverlässigkeit Ihrer LookML-Projekte zu gewährleisten. Mit CI werden Abfragefehler verhindert und Probleme mit SQL, Datentests, Inhalten und LookML erkannt, bevor sie in die Produktion gelangen. Sie können auch CI-Validatoren so konfigurieren, dass sie automatisch ausgeführt werden, wenn eine Pull-Anfrage an Ihr LookML-Repository gesendet wird. So wird Ihr Entwicklungsablauf optimiert.
Compliance-Funktionen von Continuous Integration
Looker CI ist nicht in den Autorisierungsgrenzen von FedRAMP High, FedRAMP Moderate oder DoD Impact Level 5 (IL5) enthalten.
Bevor Sie die Looker CI-Einstellung für Ihre Looker-Instanz aktivieren, sollten Sie sich mit Ihrer Autorisierungsstelle abstimmen, um zu ermitteln, ob die Compliance-Angebote von Looker CI die spezifischen Sicherheits- und behördlichen Anforderungen Ihrer Organisation erfüllen.
Bei Looker (Google Cloud Core)-Instanzen werden mit jedem verfügbaren Assured Workloads-Kontrollpaket Looker CI-Funktionen als Standardangebote hinzugefügt, sobald die Änderungsanforderungen und -prozesse dieses Pakets erfüllt sind.
Continuous Integration aktivieren
Mit der Looker-Funktion Continuous Integration (CI) können Sie Tests für Ihr LookML-Projekt ausführen, um zuverlässigere, effizientere und benutzerfreundlichere Daten zu liefern. Mit den CI-Validatoren können Sie Probleme mit SQL, Datentests, Inhalten und LookML erkennen, bevor sie in die Produktion gelangen. So können Sie Ihre LookML-Projekte überprüfen und Abfragefehler für Ihre Nutzer verhindern. Sie können die CI-Validatoren auch so konfigurieren, dass sie automatisch nach einem Zeitplan oder beim Senden einer Pull-Anfrage an Ihr LookML-Repository ausgeführt werden.
Ein Looker-Administrator kann CI für Ihre Instanz aktivieren, indem er die Option Continuous Integration aktivieren verwendet.
Looker CI-Nutzer
Wenn Sie Continuous Integration für Ihre Instanz aktivieren, erstellt Looker automatisch 10 Looker CI-Nutzer in der Looker CI-Nutzer Nutzergruppe mit der Looker CI-Nutzer Rolle. Ein Looker-Administrator kann die Looker CI-Nutzer auf dem Tab Dienstkonten der Seite "Verwaltung" Nutzer ansehen.
Wenn Ihre Instanz Zugriffsberechtigungen verwendet, um den Zugriff auf Explores zu steuern, müssen die Looker CI-Nutzer in diesen Zugriffsberechtigungen enthalten sein. Sie können die CI-Nutzer einbeziehen, indem Sie der Gruppe Looker CI-Nutzer die entsprechenden Nutzerattributwerte zuweisen, wie auf der Dokumentationsseite Admin-Einstellungen – Nutzerattribute beschrieben.
Integrationen
Mit Continuous Integration können Sie CI-Suites automatisch ausführen, wenn Pull-Anfragen oder Commits in Ihrem Remote-Git-Repository erfolgen. Sie können Continuous Integration so konfigurieren, dass es in die folgenden Git-Anbieter eingebunden wird:
- GitHub (mit der Looker CI-GitHub-App)
- GitLab (mit der Looker API und GitLab CI)
- Bitbucket (mit der Looker API und Bitbucket Pipelines)
- GitHub Actions (mit der Looker API und GitHub Actions)
GitHub
Wenn Sie ein cloudbasiertes GitHub-Repository als Remote-Repository für Ihr LookML-Projekt verwenden, können Sie Continuous Integration so konfigurieren, dass CI-Suites automatisch ausgeführt werden, wenn LookML-Entwickler Pull-Anfragen an Ihr LookML-Repository senden.
Damit CI-Suites automatisch in Ihrem Repository ausgeführt werden können, benötigt Continuous Integration die folgenden Berechtigungen:
- Lesezugriff auf die Metadaten und Pull-Anfragen Ihres Repositorys
- Lese- und Schreibzugriff auf die Commit-Status, Repository-Hooks und Workflows Ihres Repositorys
Diese Berechtigungen werden nicht eingerichtet, wenn Sie eine Git-Verbindung für Ihr LookML-Projekt in der Looker-IDE einrichten. Wenn Sie Pull-Anfragen zum Auslösen von CI-Ausführungen verwenden möchten, muss Ihr LookML-Projekt mit einer Git-Verbindung eingerichtet sein (wie auf der Seite Git-Verbindung einrichten und testen beschrieben). Außerdem müssen Sie die CI-GitHub-App konfigurieren, wie im Abschnitt CI-GitHub-App konfigurieren beschrieben.
GitHub-Tabelle
In der Tabelle GitHub auf der Admin-Seite Continuous Integration sind die GitHub-Repositories aufgeführt, die für die LookML-Projekte in Ihrer Looker-Instanz konfiguriert sind. Diese GitHub-Repositories wurden von Ihren LookML-Entwicklern konfiguriert, wie auf der Dokumentationsseite Git-Verbindung einrichten und testen beschrieben.
Für jedes aufgeführte GitHub-Repository zeigt die Tabelle an, ob das Repository mit der CI-GitHub-App konfiguriert wurde:
- Installiert: Dem Repository wurde die Looker CI-GitHub-App gewährt, mit der CI automatisch ausgeführt werden kann, wenn LookML-Entwickler Pull-Anfragen an Ihr LookML-Repository senden.
- Nicht installiert: Das Repository wurde nicht für die Pull-Anfragen-Integration mit Looker CI eingerichtet. Informationen zum Konfigurieren des Repositorys für die CI-Pull-Anfragen-Integration finden Sie im Abschnitt CI-GitHub-App konfigurieren.
CI-GitHub-App konfigurieren
So gewähren Sie die CI-GitHub-App für ein Repository:
- Klicken Sie auf der Seite "Verwaltung" Continuous Integration in Looker auf die Schaltfläche GitHub-App konfigurieren. Dadurch wird ein Browserfenster zur GitHub-Webseite für Apps geöffnet.
- Wählen Sie das GitHub-Konto aus, in dem Ihre LookML-Dateien gespeichert sind.
- Wählen Sie im Bereich Repository-Zugriff die Option Alle Repositories aus, um CI-Integrationen für alle Git-Repositories zuzulassen, die dem Ressourceninhaber gehören. Alternativ können Sie Nur ausgewählte Repositories auswählen, um die Repositories auszuwählen, für die Sie Continuous Integration verwenden möchten.
- Klicken Sie auf Speichern.
Wenn die Looker CI-GitHub-App erfolgreich für das Repository gewährt wurde, wird in Looker für das Repository in der Tabelle GitHub auf der Admin-Seite Continuous Integration Installiert angezeigt.
GitLab
Sie können Looker Continuous Integration-Ausführungen über GitLab CI auslösen. Dazu verwenden Sie die Looker API und das offizielle Looker Python SDK (looker-sdk).
So lösen Sie eine Looker CI-Ausführung über eine GitLab CI-Pipeline aus:
- Konfigurieren Sie CI/CD-Variablen in GitLab.
- Erstellen Sie das Python-Skript für GitLab CI.
- Konfigurieren Sie den GitLab CI-Workflow.
CI/CD-Variablen in GitLab konfigurieren
Öffnen Sie in Ihrem GitLab-Projekt Einstellungen > CI/CD > Variablen und erstellen Sie die folgenden CI/CD-Variablen. Legen Sie für jede Variable Maskiert fest, um vertrauliche Werte zu schützen:
LOOKERSDK_BASE_URL: die API-URL Ihrer Looker-Instanz (z. B.https://example.cloud.looker.com)LOOKERSDK_CLIENT_ID: die API3-Client-ID, die auf der Seite „Verwaltung“ Nutzer in Looker generiert wurdeLOOKERSDK_CLIENT_SECRET: der entsprechende API3-Clientschlüssel, der auf der Seite "Verwaltung" Nutzer in Looker generiert wurde
Python-Skript für GitLab CI erstellen
Erstellen Sie in Ihrem Repository ein Python-Skript mit dem Namen run_looker_ci.py. Dieses Skript verwendet das Looker SDK, um die CI-Ausführung auszulösen und abzufragen, bis sie abgeschlossen ist:
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!")
GitLab CI-Workflow konfigurieren
Erstellen oder aktualisieren Sie im Stammverzeichnis Ihres Repositorys die Pipeline-Konfigurationsdatei .gitlab-ci.yml, um looker-sdk zu installieren und run_looker_ci.py auszuführen:
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"
Ersetzen Sie Folgendes:
LOOKER_PROJECT_ID: die ID des Looker-Projekts, das Sie testen möchtenLOOKER_SUITE_ID: die ID der CI-Suite, die Sie ausführen möchten
Bitbucket
Sie können Looker Continuous Integration-Ausführungen über Bitbucket Pipelines auslösen. Dazu verwenden Sie die Looker API und das offizielle Looker Python SDK (looker-sdk).
So lösen Sie eine Looker CI-Ausführung über Bitbucket Pipelines aus:
- Konfigurieren Sie Repository-Variablen in Bitbucket.
- Erstellen Sie das Python-Skript für Bitbucket Pipelines.
- Konfigurieren Sie den Bitbucket Pipelines-Workflow.
Repository-Variablen in Bitbucket konfigurieren
Öffnen Sie in Ihrem Bitbucket-Repository Repository-Einstellungen > Repository-Variablen und erstellen Sie die folgenden Repository-Variablen. Legen Sie für jede Variable Gesichert fest, um vertrauliche Werte zu schützen:
LOOKERSDK_BASE_URL: die API-URL Ihrer Looker-Instanz (z. B.https://example.cloud.looker.com)LOOKERSDK_CLIENT_ID: die API3-Client-ID, die auf der Seite „Verwaltung“ Nutzer in Looker generiert wurdeLOOKERSDK_CLIENT_SECRET: der entsprechende API3-Clientschlüssel, der auf der Seite "Verwaltung" Nutzer in Looker generiert wurde
Python-Skript für Bitbucket Pipelines erstellen
Erstellen Sie in Ihrem Repository ein Python-Skript mit dem Namen run_looker_ci.py. Dieses Skript verwendet das Looker SDK, um die CI-Ausführung auszulösen und abzufragen, bis sie abgeschlossen ist:
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!")
Bitbucket Pipelines-Workflow konfigurieren
Erstellen oder aktualisieren Sie im Stammverzeichnis Ihres Repositorys die Datei bitbucket-pipelines.yml, um looker-sdk zu installieren und run_looker_ci.py auszuführen:
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
Ersetzen Sie Folgendes:
LOOKER_PROJECT_ID: die ID des Looker-Projekts, das Sie testen möchtenLOOKER_SUITE_ID: die ID der CI-Suite, die Sie ausführen möchten
GitHub Actions
Sie können Looker Continuous Integration-Ausführungen über GitHub Actions auslösen. Dazu verwenden Sie die Looker API und das offizielle Looker Python SDK (looker-sdk).
So lösen Sie eine Looker CI-Ausführung über einen GitHub Actions-Workflow aus:
- Konfigurieren Sie Repository-Secrets in GitHub.
- Erstellen Sie das Python-Skript für GitHub Actions.
- Konfigurieren Sie den GitHub Actions-Workflow.
Repository-Secrets in GitHub konfigurieren
Öffnen Sie in Ihrem GitHub-Repository Einstellungen > Secrets und Variablen > Aktionen und erstellen Sie die folgenden Repository-Secrets:
LOOKERSDK_BASE_URL: die API-URL Ihrer Looker-Instanz (z. B.https://example.cloud.looker.com)LOOKERSDK_CLIENT_ID: die API3-Client-ID, die auf der Seite „Verwaltung“ Nutzer in Looker generiert wurdeLOOKERSDK_CLIENT_SECRET: der entsprechende API3-Clientschlüssel, der auf der Seite "Verwaltung" Nutzer in Looker generiert wurde
Python-Skript für GitHub Actions erstellen
Erstellen Sie in Ihrem Repository ein Python-Skript mit dem Namen run_looker_ci.py. Dieses Skript verwendet das Looker SDK, um die CI-Ausführung auszulösen und abzufragen, bis sie abgeschlossen ist:
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!")
GitHub Actions-Workflow konfigurieren
Erstellen Sie in Ihrem Repository eine Workflow-Datei unter .github/workflows/looker-ci.yml mit der folgenden Konfiguration:
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
Ersetzen Sie Folgendes:
LOOKER_PROJECT_ID: die ID des Looker-Projekts, das Sie testen möchtenLOOKER_SUITE_ID: die ID der CI-Suite, die Sie ausführen möchten
dbt Cloud-Konfiguration
Wenn Sie dbt Cloud verwenden, können Sie Continuous Integration so konfigurieren, dass CI-Suites automatisch ausgeführt werden, wenn ein dbt Cloud CI-Job abgeschlossen ist. Durch die Ausführung der CI-Suite wird sichergestellt, dass Änderungen an Ihren dbt-Modellen Ihr LookML-Projekt nicht beschädigen.
Führen Sie im Abschnitt dbt Cloud-Konfiguration die folgenden Schritte aus, um die dbt Cloud-Integration zu konfigurieren:
- Geben Sie im Feld dbt Cloud-Host-URL die URL zu Ihrem dbt Cloud-Konto ein.
- Geben Sie im Feld dbt Cloud-API-Schlüssel ein dbt Cloud-Dienstkonto-Token ein.
- Klicken Sie auf Test Connection. Looker prüft, ob eine Verbindung zu Ihrem dbt Cloud-Konto hergestellt werden kann, und ruft dann Ihre dbt Cloud-Konto-ID ab.
- Klicken Sie auf Speichern.
Nutzerattribute
Sie können Nutzerattribute konfigurieren, die von Continuous Integration bei Validierungsläufen überschrieben werden können. Nutzerattribute werden in Verbindung mit der dbt Cloud-Integration verwendet, um Looker auf temporäre Schemas zu verweisen, die von dbt Cloud CI-Jobs erstellt wurden.
So konfigurieren Sie Standardwerte für Nutzerattribute für CI:
- Wählen Sie im Feld Nutzerattribut ein Nutzerattribut aus der Drop-down-Liste aus. Wenn kein Nutzerattribut ausgewählt ist, verwendet Looker das Nutzerattribut, das im Feld Primäres Dataset in Ihrer Datenbankverbindung für CI-Ausführungen definiert ist.
- Geben Sie im Feld Wert für CI-Ausführung den Wert ein, der für dieses Nutzerattribut für CI-Ausführungen verwendet werden soll.
- Klicken Sie auf Speichern.
Sie können mehrere Paare aus Nutzerattribut und Wert hinzufügen. Jedes im Abschnitt Nutzerattribute konfigurierte Nutzerattribut kann in Ihren CI-Suite-Konfigurationen als Überschreibung ausgewählt werden.
Klicken Sie auf Entfernen, um ein Paar aus Nutzerattribut und Wert zu löschen.