Impostazioni amministratore - Integrazione continua

La pagina Integrazione continua nella sezione Piattaforma del menu Amministrazione ti consente di configurare le impostazioni per la funzionalità integrazione continua (CI) di Looker. Configura le impostazioni CI di Looker (Google Cloud core) per garantire la qualità e l'affidabilità dei tuoi progetti LookML. CI continua previene gli errori delle query e identifica i problemi relativi a SQL, test dei dati, contenuti e LookML prima che raggiungano la produzione. Puoi anche configurare i validatori CI in modo che vengano eseguiti automaticamente quando viene inviata una richiesta di pull al repository LookML, semplificando il flusso di lavoro di sviluppo.

Funzionalità di conformità dell'integrazione continua

Looker CI non è incluso nei limiti di autorizzazione FedRAMP High, FedRAMP Moderate o DoD Impact Level 5 (IL5).

Prima di attivare l'impostazione Looker CI per la tua istanza di Looker, consulta l'ente autorizzatore per determinare se le offerte di conformità di Looker CI soddisfano i requisiti normativi e di sicurezza specifici della tua organizzazione.

Per le istanze di Looker (Google Cloud core), ogni pacchetto di controlli Assured Workloads che diventa disponibile aggiungerà le funzionalità di Looker CI come offerte predefinite man mano che i requisiti e i processi di modifica del pacchetto vengono soddisfatti.

Attiva l'integrazione continua

La funzionalità di integrazione continua (CI) di Looker ti consente di eseguire test sul tuo progetto LookML per offrire esperienze dati più affidabili, efficienti e intuitive. Puoi utilizzare i validatori CI per identificare problemi relativi a SQL, test dei dati, contenuti e LookML prima che vengano inseriti in produzione per verificare il codice LookML e prevenire errori di query per gli utenti. Puoi anche configurare i validatori CI in modo che vengano eseguiti automaticamente in base a una pianificazione o quando viene inviata una richiesta di pull al repository LookML.

Un amministratore di Looker può utilizzare il pulsante di attivazione/disattivazione Abilita integrazione continua per abilitare CI continua nell'istanza.

Utenti Looker CI

Quando attivi l'integrazione continua nell'istanza, Looker crea automaticamente 10 utenti Looker CI nel gruppo di utenti Looker CI con il ruolo Utenti Looker CI. Un amministratore di Looker può visualizzare gli utenti di Looker CI dalla scheda Service Accounts (Account di servizio) della pagina Amministrazione Users (Utenti).

Se la tua istanza utilizza le concessioni di accesso per controllare l'accesso agli Explore, gli utenti di Looker CI devono essere inclusi in queste concessioni di accesso. Puoi includere gli utenti Looker CI assegnando i valori degli attributi utente pertinenti al gruppo Utenti Looker CI, come descritto nella pagina di documentazione Impostazioni di amministrazione - Attributi utente.

Integrazioni

L'integrazione continua ti consente di eseguire automaticamente le suite CI quando si verificano richieste di pull o commit nel repository Git remoto. Puoi configurare l'integrazione continua per l'integrazione con i seguenti provider Git:

  • GitHub (utilizza l'app GitHub Looker CI)
  • GitLab (utilizza l'API Looker e GitLab CI)
  • Bitbucket (utilizza l'API Looker e Bitbucket Pipelines)
  • GitHub Actions (utilizza l'API Looker e GitHub Actions)

GitHub

Se hai un repository GitHub basato sul cloud come repository remoto per il tuo progetto LookML, puoi configurare l'integrazione continua per eseguire automaticamente le suite CI quando gli sviluppatori LookML inviano richieste di pull al tuo repository LookML.

Per le istanze di Looker (Google Cloud core) che utilizzano connessioni private o connessioni ibride con Private Service Connect oppure per le istanze all'interno di un perimetro dei controlli di servizio VPC, la configurazione di rete deve consentire il traffico in entrata e in uscita da e verso GitHub. Nella maggior parte dei casi, questa configurazione di rete è già impostata quando configuri l'istanza di Looker (Google Cloud core) per la connessione a GitHub. Per ulteriori informazioni sulla configurazione delle connessioni in uscita, consulta la pagina della documentazione Accesso in uscita di Looker (Google Cloud core) a servizi esterni utilizzando Private Service Connect.

Per eseguire automaticamente le suite CI sul repository, l'integrazione continua richiede le seguenti autorizzazioni:

  • Accesso in lettura ai metadati e alle richieste di pull del repository
  • Accesso in lettura e scrittura agli stati dei commit, agli hook del repository e ai workflow del repository

Queste autorizzazioni non vengono configurate quando configuri una connessione Git per il tuo progetto LookML nell'IDE di Looker. Se vuoi utilizzare l'attivazione delle richieste di pull per le esecuzioni CI, il tuo progetto LookML deve essere configurato con una connessione Git (come descritto nella pagina Configurazione e test di una connessione Git) e devi anche configurare l'app GitHub CI come descritto nella sezione Configurazione dell'app GitHub CI.

Tabella GitHub

La tabella GitHub nella pagina Amministrazione Integrazione continua elenca i repository GitHub configurati per i progetti LookML nella tua istanza di Looker. Questi repository GitHub sono stati configurati dagli sviluppatori LookML come descritto nella pagina della documentazione Configurazione e test di una connessione Git.

Per ogni repository GitHub elencato, la tabella mostra se il repository è stato configurato con l'app GitHub CI:

Configurazione dell'app GitHub CI

Per concedere l'applicazione GitHub CI per un repository:

  1. Nella pagina Amministrazione Integrazione continua di Looker, fai clic sul pulsante Configura app GitHub. Si aprirà una finestra del browser con la pagina web delle app GitHub.
  2. Seleziona l'account GitHub in cui è archiviato il tuo LookML.
  3. Nella sezione Accesso al repository, seleziona Tutti i repository per consentire le integrazioni CI per tutti i repository Git di proprietà del proprietario della risorsa oppure seleziona Solo repository selezionati per scegliere i repository con cui vuoi utilizzare l'integrazione continua.
  4. Fai clic su Salva.

Se l'applicazione GitHub di Looker CI viene concessa correttamente al repository, Looker mostra Installata per il repository nella tabella GitHub nella pagina Amministrazione Integrazione continua.

GitLab

Puoi attivare le esecuzioni di integrazione continua di Looker da GitLab CI utilizzando l'API Looker e l'SDK Python ufficiale di Looker (looker-sdk).

Per attivare l'esecuzione di Looker CI da una pipeline GitLab CI, completa i seguenti passaggi:

  1. Configura le variabili CI/CD in GitLab.
  2. Crea lo script Python per GitLab CI.
  3. Configura il flusso di lavoro GitLab CI.

Configura le variabili CI/CD in GitLab

Nel progetto GitLab, vai a Impostazioni > CI/CD > Variabili e crea le seguenti variabili CI/CD. Imposta ogni variabile su Mascherato per proteggere i valori sensibili:

  • LOOKERSDK_BASE_URL: l'URL dell'API della tua istanza Looker (ad esempio, https://example.cloud.looker.com)
  • LOOKERSDK_CLIENT_ID: l'ID client API3 generato dalla pagina Amministrazione Utenti in Looker
  • LOOKERSDK_CLIENT_SECRET: il segreto client API3 corrispondente generato dalla pagina Amministrazione Utenti in Looker

Crea lo script Python per GitLab CI

Crea uno script Python denominato run_looker_ci.py nel repository. Questo script utilizza l'SDK Looker per attivare l'esecuzione di CI e eseguire il polling fino al termine dell'esecuzione:

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 il workflow GitLab CI

Nella directory principale del repository, crea o aggiorna il file di configurazione della pipeline .gitlab-ci.yml per installare looker-sdk ed eseguire 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"

Sostituisci quanto segue:

  • LOOKER_PROJECT_ID: l'ID del progetto Looker che vuoi testare
  • LOOKER_SUITE_ID: l'ID della suite CI che vuoi eseguire

Bitbucket

Puoi attivare le esecuzioni di integrazione continua di Looker da Bitbucket Pipelines utilizzando l'API Looker e l'SDK Python ufficiale di Looker (looker-sdk).

Per attivare un'esecuzione di Looker CI da Bitbucket Pipelines, completa i seguenti passaggi:

  1. Configura le variabili del repository in Bitbucket.
  2. Crea lo script Python per Bitbucket Pipelines.
  3. Configura il flusso di lavoro di Bitbucket Pipelines.

Configura le variabili del repository in Bitbucket

Nel repository Bitbucket, vai a Impostazioni repository > Variabili repository e crea le seguenti variabili repository. Imposta ogni variabile su Protetto per proteggere i valori sensibili:

  • LOOKERSDK_BASE_URL: l'URL dell'API della tua istanza Looker (ad esempio, https://example.cloud.looker.com)
  • LOOKERSDK_CLIENT_ID: l'ID client API3 generato dalla pagina Amministrazione Utenti in Looker
  • LOOKERSDK_CLIENT_SECRET: il secret client API3 corrispondente generato dalla pagina Amministrazione Utenti in Looker

Crea lo script Python per Bitbucket Pipelines

Crea uno script Python denominato run_looker_ci.py nel repository. Questo script utilizza l'SDK Looker per attivare l'esecuzione di CI e eseguire il polling fino al termine dell'esecuzione:

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 il workflow di Bitbucket Pipelines

Nella directory root del repository, crea o aggiorna il file bitbucket-pipelines.yml per installare looker-sdk ed eseguire 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

Sostituisci quanto segue:

  • LOOKER_PROJECT_ID: l'ID del progetto Looker che vuoi testare
  • LOOKER_SUITE_ID: l'ID della suite CI che vuoi eseguire

GitHub Actions

Puoi attivare le esecuzioni di integrazione continua di Looker da GitHub Actions utilizzando l'API Looker e l'SDK Python ufficiale di Looker (looker-sdk).

Per attivare un'esecuzione di Looker CI da un flusso di lavoro di GitHub Actions, completa i seguenti passaggi:

  1. Configura i secret del repository in GitHub.
  2. Crea lo script Python per GitHub Actions.
  3. Configura il flusso di lavoro GitHub Actions.

Configurare i secret del repository in GitHub

Nel repository GitHub, vai a Settings > Secrets and variables > Actions e crea i seguenti secret del repository:

  • LOOKERSDK_BASE_URL: l'URL dell'API della tua istanza Looker (ad esempio, https://example.cloud.looker.com)
  • LOOKERSDK_CLIENT_ID: l'ID client API3 generato dalla pagina Amministrazione Utenti in Looker
  • LOOKERSDK_CLIENT_SECRET: il secret client API3 corrispondente generato dalla pagina Amministrazione Utenti in Looker

Crea lo script Python per GitHub Actions

Crea uno script Python denominato run_looker_ci.py nel repository. Questo script utilizza l'SDK Looker per attivare l'esecuzione di CI e eseguire il polling fino al termine dell'esecuzione:

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

Configurare il workflow GitHub Actions

Nel repository, crea un file di workflow in .github/workflows/looker-ci.yml con la seguente configurazione:

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

Sostituisci quanto segue:

  • LOOKER_PROJECT_ID: l'ID del progetto Looker che vuoi testare
  • LOOKER_SUITE_ID: l'ID della suite CI che vuoi eseguire

Configurazione dbt Cloud

Se utilizzi dbt Cloud, puoi configurare l'integrazione continua per eseguire automaticamente le suite CI al termine di un job CI dbt Cloud. L'esecuzione della suite CI contribuisce a garantire che le modifiche ai modelli dbt non interrompano il progetto LookML.

Per configurare l'integrazione dbt Cloud, segui questi passaggi nella sezione Configurazione dbt Cloud:

  1. Nel campo URL host dbt Cloud, inserisci l'URL del tuo account dbt Cloud.
  2. Nel campo Chiave API dbt Cloud, inserisci un token account di servizio dbt Cloud.
  3. Fai clic su Prova connessione. Looker verificherà di potersi connettere al tuo account dbt Cloud e recupererà il tuo ID account dbt Cloud.
  4. Fai clic su Salva.

Attributi dell'utente

Puoi configurare gli attributi utente che l'integrazione continua può ignorare durante le esecuzioni di convalida. Gli attributi utente vengono utilizzati insieme all'integrazione di dbt Cloud per indirizzare Looker agli schemi temporanei creati dai job dbt Cloud CI.

Per configurare i valori predefiniti degli attributi utente per CI, segui questi passaggi nella sezione Attributi utente:

  1. Nel campo Attributo utente, seleziona un attributo utente dall'elenco a discesa. Se non viene selezionato alcun attributo utente, Looker utilizzerà l'attributo utente definito nel campo Dataset principale nella connessione al database per le esecuzioni di CI.
  2. Nel campo Valore per l'esecuzione CI, inserisci il valore da utilizzare con questo attributo utente per le esecuzioni CI.
  3. Fai clic su Salva.

Puoi aggiungere più coppie di attributi e valori utente. Ogni attributo utente configurato nella sezione Attributi utente sarà disponibile per la selezione come override nelle configurazioni della suite CI.

Per eliminare una coppia attributo-valore utente, fai clic su Rimuovi.