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

A página Integração contínua na seção Plataforma do menu Administrador 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 seu fluxo de trabalho de desenvolvimento.

Recursos de compliance 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 Nível de impacto 5 (IL5) do Departamento de Defesa.

Antes de ativar a configuração de CI do Looker na sua instância, consulte o órgão autorizador para determinar se as ofertas de compliance do 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 ficar disponível vai adicionar recursos de 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

Com o recurso integração contínua (CI) do Looker, é possível executar testes no seu 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, verificar o LookML e evitar erros de consulta para os usuários. Você também pode configurar os validadores de CI para serem executados automaticamente em uma programação ou quando uma solicitação de envio é enviada ao seu repositório do LookML.

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

Usuários da CI do Looker

Quando você ativa a integração contínua na sua 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 a função Usuários da CI do Looker. Um administrador do Looker pode conferir os usuários da CI do Looker na guia Contas de serviço da página Administrador Usuários.

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

Integrações

Com a integração contínua, é possível executar pacotes de CI automaticamente quando ocorrem solicitações de pull ou commits no seu repositório Git remoto. É possível configurar a integração contínua para se integrar aos seguintes provedores Git:

  • GitHub (use o app GitHub do CI do Looker)
  • GitLab (use a API Looker e o GitLab CI)
  • Bitbucket (use a API Looker e os pipelines do Bitbucket)
  • 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 LookML, poderá configurar a integração contínua para executar automaticamente pacotes de CI quando os desenvolvedores do LookML enviarem solicitações de envio ao seu repositório LookML.

Para instâncias do Looker (Google Cloud Core) que usam conexões particulares ou híbridas com o Private Service Connect ou para instâncias em um perímetro do VPC Service Controls, sua configuração de rede precisa permitir o tráfego de entrada e saída para e do GitHub. Na maioria dos casos, essa configuração de rede já está definida quando você configura a instância do Looker (Google Cloud Core) para se conectar ao GitHub. Para mais informações sobre como configurar conexões de saída, consulte a página de documentação Acesso de saída do Looker (Google Cloud Core) a serviços externos usando o Private Service Connect.

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

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

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

Tabela do GitHub

A tabela GitHub na página Administrador Integração contínua lista os repositórios do GitHub configurados para os projetos do LookML na sua 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 do Git.

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

Como configurar o app GitHub de CI

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

  1. Na página Administrador Integração contínua do Looker, clique no botão Configurar app GitHub. Isso vai abrir uma janela do navegador na página da Web de apps do GitHub.
  2. Selecione a conta do GitHub em que sua LookML está armazenada.
  3. Na seção Acesso ao repositório, selecione Todos os repositórios para permitir integrações de CI em todos os repositórios Git de propriedade do proprietário do recurso ou selecione Somente repositórios selecionados para escolher os repositórios que você quer usar com 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 do 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 Looker para Python (looker-sdk).

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

  1. Configure 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.

Configurar variáveis de CI/CD no GitLab

No projeto do GitLab, acesse Settings > CI/CD > Variables 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 sua 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 do Looker
  • LOOKERSDK_CLIENT_SECRET: a chave secreta do cliente da API3 correspondente gerada na página Administrador Usuários do Looker

Criar o script Python para o GitLab CI

Crie um script Python chamado run_looker_ci.py no seu repositório. Esse script usa o SDK do Looker para acionar a execução da CI e fazer polling até que ela 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!")

Configurar 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 conjunto de CI que você quer executar

Bitbucket

É possível acionar execuções de Integração Contínua do Looker nas pipelines do Bitbucket usando a API Looker e o SDK oficial do Looker para Python (looker-sdk).

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

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

Configurar variáveis de 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: Defina cada variável como Secured para proteger valores sensíveis:

  • LOOKERSDK_BASE_URL: o URL da API da sua 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 do Looker
  • LOOKERSDK_CLIENT_SECRET: a chave secreta do cliente da API3 correspondente gerada na página Administrador Usuários do Looker.

Criar o script Python para o Bitbucket Pipelines

Crie um script Python chamado run_looker_ci.py no seu repositório. Esse script usa o SDK do Looker para acionar a execução da CI e fazer polling até que ela 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!")

Configurar 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 conjunto de CI que você quer executar

GitHub Actions

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

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

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

Configurar segredos do repositório no GitHub

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

  • LOOKERSDK_BASE_URL: o URL da API da sua 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 do Looker
  • LOOKERSDK_CLIENT_SECRET: a chave secreta do cliente da API3 correspondente gerada na página Administrador Usuários do Looker.

Criar o script Python para o GitHub Actions

Crie um script Python chamado run_looker_ci.py no seu repositório. Esse script usa o SDK do Looker para acionar a execução da CI e fazer polling até que ela 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!")

Configurar 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 conjunto de CI que você quer executar

Configuração da DBT do Cloud

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

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

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

Atributos do usuário

É possível configurar atributos de 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 do dbt Cloud para direcionar o Looker a esquemas temporários criados por jobs de CI do dbt Cloud.

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

  1. No campo Atributo do usuário, selecione uma opção na lista suspensa. Se nenhum atributo de usuário for selecionado, o Looker vai usar o atributo definido no campo Conjunto de dados principal da conexão de 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 de 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 de usuário configurado na seção Atributos do usuário estará disponível para seleção como uma substituição nas suas configurações da CI Suite.

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