Configurações de administrador: integração contínua

A página Integração contínua na seção Plataforma do menu Admin permite configurar as definições do recurso Integração contínua (CI) do Looker. Configure as definições de CI do Looker (Google Cloud Core) para garantir a qualidade e a confiabilidade dos seus projetos do LookML. A CI evita erros de consulta e identifica problemas com SQL, testes de dados, conteúdo e LookML antes que eles cheguem à produção. Também é possível configurar validadores de CI para serem executados automaticamente quando uma solicitação de envio é enviada ao repositório do LookML, simplificando o fluxo de trabalho de desenvolvimento.

Recursos de conformidade da integração contínua

A CI do Looker não está incluída nos limites de autorização do FedRAMP High, FedRAMP Moderate ou DoD Impact Level 5 (IL5).

Antes de ativar a configuração da CI do Looker para sua instância, consulte o órgão autorizador para determinar se as ofertas de conformidade da CI do Looker atendem aos requisitos específicos de segurança e regulamentação da sua organização.

Para instâncias do Looker (Google Cloud Core), cada pacote de controle do Assured Workloads que se tornar disponível vai adicionar recursos da CI do Looker como ofertas padrão à medida que os requisitos e processos de mudança desse pacote forem atendidos.

Permita uma integração contínua

O recurso de integração contínua (CI) do Looker permite executar testes no projeto do LookML para oferecer experiências de dados mais confiáveis, eficientes e fáceis de usar. É possível usar os validadores de CI para identificar problemas com SQL, testes de dados, conteúdo e LookML antes que eles cheguem à produção, para verificar o LookML e evitar erros de consulta para os usuários. Também é possível configurar os validadores de CI para serem executados automaticamente em uma programação ou quando uma solicitação de envio é enviada ao repositório do LookML.

Um administrador do Looker pode usar a opção Ativar integração contínua para ativar a CI na instância.

Usuários da CI do Looker

Quando você ativa a integração contínua na instância, o Looker cria automaticamente 10 usuários da CI do Looker no grupo de usuários Usuários da CI do Looker com o papel Usuários da CI do Looker. Um administrador do Looker pode visualizar os usuários da CI do Looker na guia Contas de serviço da página Usuários do administrador.

Se a instância usar concessões de acesso para controlar o acesso às análises, os usuários da CI do Looker precisarão ser incluídos nessas concessões. É possível incluir os usuários da CI atribuindo os valores de atributo de usuário relevantes ao grupo Usuários da CI do Looker, conforme descrito na página de documentação Configurações do administrador - Atributos do usuário.

Integrações

A integração contínua permite executar pacotes de CI automaticamente quando solicitações de envio ou confirmações ocorrem no repositório Git remoto. É possível configurar a integração contínua para integrar com os seguintes provedores Git:

  • GitHub (use o app GitHub da CI do Looker)
  • GitLab (use a API Looker e o GitLab CI)
  • Bitbucket (use a API Looker e o Bitbucket Pipelines)
  • GitHub Actions (use a API Looker e o GitHub Actions)

GitHub

Se você tiver um repositório do GitHub baseado na nuvem como um repositório remoto para seu projeto do LookML, poderá configurar a integração contínua para executar pacotes de CI automaticamente quando os desenvolvedores do LookML enviarem solicitações de envio ao repositório do LookML.

Para executar pacotes de CI automaticamente no repositório, a integração contínua precisa das seguintes permissões:

  • Acesso de leitura aos metadados e solicitações de envio do repositório
  • Acesso de leitura e gravação aos status de confirmação, hooks de repositório e fluxos de trabalho do repositório

Essas permissões não são configuradas quando você configura uma conexão Git para seu projeto do LookML no Looker IDE. Se você quiser usar o acionamento de solicitação de envio para execuções de CI, o projeto do LookML precisará ser configurado com uma conexão Git (conforme descrito na página Como configurar e testar uma conexão Git) e também será necessário configurar o app GitHub da CI, conforme descrito na seção Como configurar o app GitHub da CI.

Tabela do GitHub

A tabela GitHub na página Administrador de Integração contínua lista os repositórios do GitHub configurados para os projetos do LookML na instância do Looker. Esses repositórios do GitHub foram configurados pelos desenvolvedores do LookML, conforme descrito na página de documentação Como configurar e testar uma conexão Git.

Para cada repositório do GitHub listado, a tabela mostra se o repositório foi configurado com o app GitHub da CI:

Como configurar o app GitHub da CI

Para conceder o aplicativo GitHub da CI a um repositório, siga estas etapas:

  1. Na página Integração contínua do administrador no Looker, clique no botão Configurar o app GitHub. Isso vai abrir uma janela do navegador para a página da Web dos apps do GitHub.
  2. Selecione a conta do GitHub em que o LookML está armazenado.
  3. Na seção Acesso ao repositório , selecione Todos os repositórios para permitir integrações de CI para todos os repositórios Git de propriedade do proprietário do recurso ou selecione Somente alguns repositórios para escolher os repositórios com que você quer usar a integração contínua.
  4. Clique em Salvar.

Se o aplicativo GitHub da CI do Looker for concedido ao repositório, o Looker vai mostrar Instalado para o repositório na tabela GitHub na página Administrador Integração contínua.

GitLab

É possível acionar execuções de integração contínua do Looker no GitLab CI usando a API Looker e o SDK oficial do Python do Looker (looker-sdk).

Para acionar uma execução da CI do Looker em um pipeline do GitLab CI, siga estas etapas:

  1. Configure as variáveis de CI/CD no GitLab.
  2. Crie o script Python para o GitLab CI.
  3. Configure o fluxo de trabalho do GitLab CI.

Configure as variáveis de CI/CD no GitLab

No projeto do GitLab, acesse Configurações > CI/CD > Variáveis e crie as seguintes variáveis de CI/CD. Defina cada variável como Mascarada para proteger valores sensíveis:

  • LOOKERSDK_BASE_URL: o URL da API da instância do Looker (por exemplo, https://example.cloud.looker.com)
  • LOOKERSDK_CLIENT_ID: o ID do cliente da API3 gerado na página Administrador Usuários no Looker
  • LOOKERSDK_CLIENT_SECRET: a chave secreta do cliente da API3 correspondente gerada na página Administrador de Usuários no Looker

Crie o script Python para o GitLab CI

Crie um script Python chamado run_looker_ci.py no repositório. Esse script usa o SDK do Looker para acionar a execução da CI e fazer uma pesquisa até que a execução seja concluída:

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

Configure o fluxo de trabalho do GitLab CI

No diretório raiz do repositório, crie ou atualize o arquivo de configuração do pipeline .gitlab-ci.yml para instalar looker-sdk e executar 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"

Substitua:

  • LOOKER_PROJECT_ID: o ID do projeto do Looker que você quer testar
  • LOOKER_SUITE_ID: o ID do pacote de CI que você quer executar

Bitbucket

É possível acionar execuções de integração contínua do Looker no Bitbucket Pipelines usando a API Looker e o SDK oficial do Python do Looker (looker-sdk).

Para acionar uma execução da CI do Looker no Bitbucket Pipelines, siga estas etapas:

  1. Configure as variáveis do repositório no Bitbucket.
  2. Crie o script Python para o Bitbucket Pipelines.
  3. Configure o fluxo de trabalho do Bitbucket Pipelines.

Configure as variáveis do repositório no Bitbucket

No repositório do Bitbucket, acesse Configurações do repositório > Variáveis do repositório e crie as seguintes variáveis do repositório. Defina cada variável como Segura para proteger valores sensíveis:

  • LOOKERSDK_BASE_URL: o URL da API da instância do Looker (por exemplo, https://example.cloud.looker.com)
  • LOOKERSDK_CLIENT_ID: o ID do cliente da API3 gerado na página Administrador Usuários no Looker
  • LOOKERSDK_CLIENT_SECRET: a chave secreta do cliente da API3 correspondente gerada na página Administrador Usuários no Looker

Crie o script Python para o Bitbucket Pipelines

Crie um script Python chamado run_looker_ci.py no repositório. Esse script usa o SDK do Looker para acionar a execução da CI e fazer uma pesquisa até que a execução seja concluída:

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

Configure o fluxo de trabalho do Bitbucket Pipelines

No diretório raiz do repositório, crie ou atualize o arquivo bitbucket-pipelines.yml para instalar looker-sdk e executar 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

Substitua:

  • LOOKER_PROJECT_ID: o ID do projeto do Looker que você quer testar
  • LOOKER_SUITE_ID: o ID do pacote de CI que você quer executar

Ações do GitHub

É possível acionar execuções de integração contínua do Looker no GitHub Actions usando a API Looker e o SDK oficial do Python do Looker (looker-sdk).

Para acionar uma execução da CI do Looker em um fluxo de trabalho do GitHub Actions, siga estas etapas:

  1. Configure os segredos do repositório no GitHub.
  2. Crie o script Python para o GitHub Actions.
  3. Configure o fluxo de trabalho do GitHub Actions.

Configure os segredos do repositório no GitHub

No repositório do GitHub, acesse Configurações > Segredos e variáveis > Ações e crie os seguintes segredos do repositório:

  • LOOKERSDK_BASE_URL: o URL da API da instância do Looker (por exemplo, https://example.cloud.looker.com)
  • LOOKERSDK_CLIENT_ID: o ID do cliente da API3 gerado na página Administrador Usuários no Looker
  • LOOKERSDK_CLIENT_SECRET: a chave secreta do cliente da API3 correspondente gerada na página Administrador Usuários no Looker

Crie o script Python para o GitHub Actions

Crie um script Python chamado run_looker_ci.py no repositório. Esse script usa o SDK do Looker para acionar a execução da CI e fazer uma pesquisa até que a execução seja concluída:

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

Configure o fluxo de trabalho do GitHub Actions

No repositório, crie um arquivo de fluxo de trabalho em .github/workflows/looker-ci.yml com a seguinte configuração:

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

Substitua:

  • LOOKER_PROJECT_ID: o ID do projeto do Looker que você quer testar
  • LOOKER_SUITE_ID: o ID do pacote de CI que você quer executar

Configuração da DBT do Cloud

Se você usa a DBT do Cloud, é possível configurar a integração contínua para executar pacotes de CI automaticamente quando um job de CI da DBT do Cloud é concluído. A execução do pacote de CI ajuda a garantir que as mudanças nos modelos da DBT não interrompam o projeto do LookML.

Para configurar a integração da DBT do Cloud, siga estas etapas na seção Configuração da DBT do Cloud:

  1. No campo URL do host da DBT do Cloud, insira o URL da sua conta da DBT do Cloud.
  2. No campo Chave de API da DBT do Cloud, insira um token de conta de serviço da DBT do Cloud.
  3. Clique em Testar conexão. O Looker vai verificar se ele pode se conectar à sua conta da DBT do Cloud e, em seguida, recuperar o ID da conta da DBT do Cloud.
  4. Clique em Salvar.

Atributos do usuário

É possível configurar atributos do usuário que a integração contínua pode substituir durante as execuções de validação. Os atributos do usuário são usados em conjunto com a integração da DBT do Cloud para direcionar o Looker a esquemas temporários criados por jobs de CI da DBT do Cloud.

Para configurar os padrões de atributo do usuário para CI, siga estas etapas na seção Atributos do usuário:

  1. No campo Atributo do usuário, selecione um atributo do usuário na lista suspensa. Se nenhum atributo do usuário for selecionado, o Looker vai usar o atributo do usuário definido no Conjunto de dados principal campo na sua conexão do banco de dados para execuções de CI.
  2. No campo Valor para execução de CI, insira o valor que deve ser usado com esse atributo do usuário para execuções de CI.
  3. Clique em Salvar.

É possível adicionar vários pares de atributo e valor do usuário. Cada atributo do usuário configurado na seção Atributos do usuário estará disponível para seleção como uma substituição nas suas configurações do pacote de CI.

Para excluir um par de atributo e valor do usuário, clique em Remover.