Administratoreinstellungen – Continuous Integration

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:

CI-GitHub-App konfigurieren

So gewähren Sie die CI-GitHub-App für ein Repository:

  1. 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.
  2. Wählen Sie das GitHub-Konto aus, in dem Ihre LookML-Dateien gespeichert sind.
  3. 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.
  4. 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:

  1. Konfigurieren Sie CI/CD-Variablen in GitLab.
  2. Erstellen Sie das Python-Skript für GitLab CI.
  3. 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 wurde
  • LOOKERSDK_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öchten
  • LOOKER_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:

  1. Konfigurieren Sie Repository-Variablen in Bitbucket.
  2. Erstellen Sie das Python-Skript für Bitbucket Pipelines.
  3. 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 wurde
  • LOOKERSDK_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öchten
  • LOOKER_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:

  1. Konfigurieren Sie Repository-Secrets in GitHub.
  2. Erstellen Sie das Python-Skript für GitHub Actions.
  3. 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 wurde
  • LOOKERSDK_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öchten
  • LOOKER_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:

  1. Geben Sie im Feld dbt Cloud-Host-URL die URL zu Ihrem dbt Cloud-Konto ein.
  2. Geben Sie im Feld dbt Cloud-API-Schlüssel ein dbt Cloud-Dienstkonto-Token ein.
  3. 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.
  4. 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:

  1. 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.
  2. 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.
  3. 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.