Instalação e configuração do CI/CD do Looker

Nesta página, explicamos como instalar e configurar os componentes necessários para implementar um fluxo de trabalho de CI/CD no Looker.

Estas instruções usam um sistema de três níveis que inclui desenvolvimento, controle de qualidade e produção. No entanto, os mesmos princípios podem ser aplicados a um sistema de duas ou quatro camadas.

Estas instruções também pressupõem o uso do GitHub como seu provedor do Git. Você pode usar outros provedores do Git para criar um fluxo de trabalho de CI/CD. No entanto, é necessário ter experiência para modificar essas instruções para seu provedor.

Siga as instruções na seção relevante para você:

Pré-requisitos

Ambiente Linux

Esse processo usa ferramentas chamadas Gazer e Spectacles, projetadas para funcionar com sistemas operacionais semelhantes ao Unix. Cada desenvolvedor de LookML precisa ter acesso à linha de comando em um ambiente Linux ou macOS em que você planeja executar o fluxo de trabalho de CI/CD.

Se você estiver usando o Windows, o Gazer e o Spectacles poderão ser usados no Subsistema Windows para Linux (WSL, na sigla em inglês) da Microsoft. Com o WSL, é possível executar várias versões diferentes do Linux. Se você não tiver um sistema operacional Linux preferido, a versão mais recente do Ubuntu Linux será uma boa opção devido ao amplo suporte.

Estas instruções fornecem exemplos para sistemas Linux e podem precisar de modificações se você estiver usando macOS ou WSL.

Uma instância do Looker por nível

Para ativar essa configuração, você precisa de uma instância do Looker para cada nível do seu sistema. Por exemplo, um sistema com um estágio de desenvolvimento, um estágio de controle de qualidade e um estágio de produção vai precisar de três instâncias separadas. As instâncias podem ser hospedadas pelo Google ou pelo cliente.

Nomes de conexão idênticos

As conexões de banco de dados precisam ter o mesmo nome em cada instância do Looker, independente do nível que representam. Por exemplo, uma conexão sales precisa ter esse nome em todas as instâncias, em vez de sales_dev ou sales_qa.

As conexões podem apontar para o mesmo banco de dados ou para bancos de dados diferentes. No entanto, se eles apontarem para o mesmo banco de dados, será necessário definir esquemas temporários diferentes para que as tabelas derivadas permanentes na instância de desenvolvimento ou controle de qualidade não interfiram na produção.

Por exemplo, se o mesmo banco de dados for usado para todas as três instâncias, elas poderão ser configuradas da seguinte maneira:

Production QA Development
Nome da conexão sales sales sales
banco de dados sales_db sales_db sales_db
Esquema de trabalho prod_sales_scratch qa_sales_scratch dev_sales_scratch

Ou, se um banco de dados exclusivo for usado para todas as três instâncias, elas poderão ser configuradas da seguinte maneira:

Production QA Development
Nome da conexão sales sales sales
banco de dados sales_db_prod sales_db_qa sales_db_dev
Esquema de trabalho sales_scratch sales_scratch sales_scratch

Repositório do Git

Um único repositório git será usado para cada projeto em todos os três níveis. A instância de desenvolvimento vai rastrear a ramificação main, enquanto as instâncias de controle de qualidade e produção geralmente apontam para tags do Git (descritas em mais detalhes posteriormente).

Etapas de configuração única

As etapas desta seção só precisam ser concluídas uma vez por alguém com permissões de administrador do Looker e do provedor Git.

Credenciais do Git

O ambiente Linux de cada desenvolvedor precisa se conectar ao mesmo repositório que você está usando para gerenciar a LookML. Provavelmente, é um repositório externo hospedado em um serviço como o GitHub. Você vai precisar de uma conta com esse serviço que tenha as credenciais adequadas para configurar o repositório. Com ela, é possível configurar uma chave SSH para permitir que seu ambiente Linux se conecte automaticamente a esse serviço.

Para o GitHub, siga as instruções em Adicionar uma nova chave SSH à sua conta do GitHub.

Como criar e configurar um repositório de servidor Git

Para que o fluxo de trabalho de CI/CD funcione, a LookML precisa ser armazenada em um repositório Git e conectada a um projeto do Looker. Nas configurações do projeto, o Nome da ramificação de produção do Git precisa ser definido como main e a opção Ativar o modo de implantação avançado precisa estar ativada.

Se as etapas a seguir ainda não foram realizadas, siga estas instruções para o GitHub:

Criar novo repositório

  1. Na interface do GitHub, pressione o botão + no canto superior direito e selecione Novo repositório.
  2. Selecione o proprietário (provavelmente sua organização) e insira um REPOSITORY_NAME.
  3. Escolha se o repositório será público ou privado (repositórios privados exigem uma assinatura paga do GitHub) e marque a caixa para inicializá-lo com um arquivo README.
  4. Clique no botão Criar repositório.
  5. Pressione o botão verde <> Code e copie o URL do SSH. Ele será semelhante a: git@github.com:org_name/REPOSITORY_NAME.git.
  6. No Looker, crie um projeto.
  7. Entre no modo de desenvolvimento e escolha o item de configurações do projeto na barra lateral esquerda. Em seguida, clique em Configurar Git.
  8. Cole o URL do repositório (git@github.com:org_name/REPOSITORY_NAME.git neste exemplo) e selecione Continuar.
  9. Copie a chave de implantação e volte para a interface do GitHub desse repositório.
  10. Escolha Configurações e depois Ações - Geral.
  11. Em Permissões de fluxo de trabalho, verifique se a opção Permitir que o GitHub Actions crie e aprove solicitações de envio está marcada e clique em Salvar.
  12. Acesse a página Chaves de implantação nas configurações do GitHub.
  13. Clique no botão Adicionar chave de implantação e cole a chave no campo Chave.
  14. Adicione um título, como Looker-REPOSITORY_NAME, marque a caixa de seleção Permitir acesso de gravação e clique no botão Adicionar chave.
  15. Volte para o Looker e escolha Testar e finalizar a configuração.
  16. Escolha "Configurações do projeto" novamente na barra lateral esquerda. Mude o Nome do branch de produção do Git para main.
  17. Escolha Ativar o modo de implantação avançada e selecione Salvar configuração do projeto.

Abaixo do ícone de configurações do projeto, no lado esquerdo, você vai encontrar um ícone de implantação do Deployment Manager.

Usar repositório atual

  1. Navegue até o repositório do GitHub que armazena sua LookML.
  2. Escolha Configurações e depois Ações - Geral.
  3. Em Permissões de fluxo de trabalho, verifique se a opção Permitir que o GitHub Actions crie e aprove solicitações de envio está marcada e clique em Salvar.
  4. Acesse a seção <> Code do repositório do GitHub.
  5. Pressione o botão verde <> Code e copie o URL do SSH. Ele será semelhante a: git@github.com:org_name/REPOSITORY_NAME.git.
  6. No Looker, crie um projeto.
  7. Entre no modo de desenvolvimento e escolha o item de configurações do projeto na barra lateral esquerda. Em seguida, clique em Configurar Git.
  8. Cole o URL do repositório (git@github.com:org_name/REPOSITORY_NAME.git neste exemplo) e selecione Continuar.
  9. Copie a chave de implantação e volte para a interface do GitHub desse repositório.
  10. Escolha Configurações e depois Implantar chaves.
  11. Clique no botão Adicionar chave de implantação e cole a chave no campo Chave.
  12. Adicione um título, como Looker-REPOSITORY_NAME, marque a caixa de seleção Permitir acesso de gravação e clique no botão Adicionar chave.
  13. Volte para o Looker e escolha Testar e finalizar a configuração.
  14. Escolha "Configurações do projeto" novamente na barra lateral esquerda. Mude o Nome do branch de produção do Git para main.
  15. Escolha Ativar o modo de implantação avançada e selecione Salvar configuração do projeto.

Abaixo do ícone de configurações do projeto, no lado esquerdo, você vai encontrar um ícone de implantação do Deployment Manager.

Como criar ações do GitHub

É útil criar várias ações do GitHub para que várias verificações ocorram automaticamente sempre que forem feitas mudanças na LookML. Para adicionar essas ações, é necessário fazer mudanças no repositório Git no ambiente Linux. Se ele ainda não estiver disponível, siga as instruções em Configurar o Git.

Para adicionar as ações do GitHub, acesse o diretório do repositório no ambiente Linux e adicione o subdiretório .github/workflows. Depois de configuradas, essas ações podem ser executadas manualmente na página Ações da interface do GitHub.

Look-At-Me-Sideways (LAMS)

O LAMS é um linter de código aberto que inspeciona sua LookML em busca de erros e práticas inadequadas. Adicione um arquivo chamado lams.yml ao diretório .github/workflows com este conteúdo:

name: LAMS

on:
  pull_request:
    branches: [ main ]
  push:
  workflow_dispatch:

jobs:
  lams_job:
    runs-on: ubuntu-latest
    name: LAMS LookML Linter Job
    steps:
    - name: Checkout your LookML
      uses: actions/checkout@v4
      with:
        ref: ${{ github.event.pull_request.head.sha }}
        fetch-depth: 0
    - name: Setup Node
      uses: actions/setup-node@v1
      with:
        node-version: '16.x'
    - name: Install LAMS
      run: npm install -g @looker/look-at-me-sideways@3
    - name: Run LAMS
      run: lams --reporting=no

O LAMS é executado sempre que uma confirmação é enviada para o GitHub ou uma solicitação de envio é aberta para mesclar o código com a ramificação main.

Release Please

O Release Please (link em inglês) é uma ferramenta de código aberto que marca automaticamente os lançamentos com os números de versão adequados.

Adicione um arquivo chamado release-please.yml ao diretório .github/workflows com este conteúdo:

name: release-please

on:
  push:
    branches:
      - main
  workflow_dispatch:

permissions:
  contents: write
  pull-requests: write

jobs:
  release-please:
    runs-on: ubuntu-latest
    steps:
      - uses: google-github-actions/release-please-action@v3
        with:
          release-type: simple

Commits convencionais

Essa ação do GitHub verifica se uma solicitação de envio foi aberta com um título que segue o padrão de commit convencional.

Adicione um arquivo chamado lint_pr_title.yml ao diretório .github/workflows com este conteúdo:

name: "Lint Pull Request Title"

on:
  pull_request_target:
    types:
      - opened
      - edited
      - synchronize

jobs:
  main:
    name: Validate PR title
      runs-on: ubuntu-latest
      steps:
        - uses: amannn/action-semantic-pull-request@v5
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

permissions:
  pull-requests:
    read statuses: write

Envie as mudanças para o GitHub

Por fim, use os comandos a seguir para confirmar e enviar essas mudanças da ação do GitHub:

git add .github/workflows/
git commit -m "chore: Added github actions"
git push

Proteção da ramificação main

Na interface do GitHub, ative as proteções de ramificação para a ramificação main. Assim, os desenvolvedores comuns não poderão enviar mudanças diretamente para ela. Em vez disso, eles fazem mudanças em uma ramificação diferente e abrem uma solicitação de envio. A solicitação de envio pode ser revisada por outro desenvolvedor antes de ser aprovada e mesclada com main.

Para configurar a proteção de ramificação, acesse a interface do GitHub para o repositório, escolha Configurações e Ramificações e pressione o botão Adicionar regra de proteção de ramificação:

Interface do GitHub para adicionar proteção de ramificação.

Insira main como o padrão do nome da ramificação e marque as seguintes opções:

  • Exigir uma solicitação de envio antes de mesclar
  • Exigir aprovações
  • Dispensar aprovações de solicitação de envio desatualizadas quando novos commits forem enviados

Interface do GitHub para definir opções de proteção de ramificação.

Por fim, clique no botão Criar na parte de baixo da página.

Quando uma solicitação de envio é criada, as ações do GitHub configuradas anteriormente nestas instruções são executadas. Depois de serem executados pela primeira vez, eles também podem ser selecionados nessa UI para que precisem ser concluídos antes que a solicitação de envio possa ser mesclada com main.

Como configurar solicitações de envio

No Looker, é possível exigir que as solicitações de pull sejam usadas e fazer com que o Looker abra PRs em nome do desenvolvedor. Isso só deve ser configurado para a instância de desenvolvimento. As instâncias de QA e produção usam o modo de implantação avançada para receber atualizações.

Para ativar, acesse a página Configuração do projeto de cada projeto e selecione Solicitações de envio necessárias no cabeçalho Integração do GitHub.

Pressione o botão para definir um secret de webhook, copie a string aleatória gerada e pressione o botão Salvar configuração do projeto.

De volta à interface do GitHub para seu repositório, escolha Configurações e Webhooks. Clique no botão Adicionar webhook no canto superior direito:

  • No campo URL de payload, insira https://LOOKER_HOST_NAME/webhooks/projects/PROJECT_NAME/deploy.
  • No campo Secret, cole o secret salvo do Looker.
  • Na pergunta Quais eventos você quer que acionem este webhook?, escolha Quero selecionar eventos individuais.

Interface do GitHub para configurar webhooks.

Verifique se as opções Pull Requests e Pushes estão selecionadas:

Caixas de seleção do GitHub para solicitações de envio e envios.

Por fim, clique no botão Adicionar webhook na parte de baixo da página.

Etapas de configuração para cada desenvolvedor do Looker

Todas as etapas de instalação a seguir precisam ser realizadas no seu ambiente Linux.

Como instalar o Ruby

A linguagem de programação Ruby precisa ser instalada para executar o Gazer. Qualquer versão do Ruby após a 2.7.7 funciona com o Gazer, mas a 3.x.x é preferível. Para instalar o Ruby no Ubuntu Linux, execute estes comandos:

sudo apt update
sudo apt install ruby

Execute ruby -v para confirmar se o Ruby está instalado corretamente. Isso vai gerar uma resposta semelhante a esta:

ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]

Esses comandos também funcionam no Debian Linux, no Linux Mint e em várias outras versões do Linux que usam o gerenciador de pacotes Aptitude. Talvez seja necessário pesquisar comandos que funcionem em outras versões do Linux ou para instalar no macOS. Confira Como instalar o Ruby para mais informações.

Instalar o Gazer

O Gazer é um projeto de código aberto criado por funcionários do Google para navegar e gerenciar espaços, Looks e painéis usando uma ferramenta de linha de comando.

Com o Ruby instalado, a ferramenta Gem do Ruby pode ser usada para instalar o Gazer:

gem install gazer

Confirme se o Gazer está instalado com o comando gzr version. Isso vai gerar uma resposta semelhante a esta:

v0.3.12

Como instalar os Spectacles

O Spectacles é uma ferramenta de código aberto usada para testar o LookML. A versão paga não está mais disponível. Confira detalhes sobre a instalação na página de início.

Como instalar o Git

O software de controle de versões do Git pode ser instalado no Ubuntu Linux com este comando:

sudo apt update
sudo apt install git

Confirme se a instalação foi bem-sucedida com o comando git --version. Isso vai gerar uma resposta semelhante a esta:

git version 2.42.0.609.gbb76f46606

Esses comandos também funcionam no Debian Linux, no Linux Mint e em várias outras versões do Linux que usam o gerenciador de pacotes Aptitude. Talvez seja necessário pesquisar comandos que funcionem em outras variações do Linux. As instruções para Fedora e macOS, por exemplo, podem ser encontradas em Primeiros passos - Instalar o Git.

Como configurar o Git

O Git no seu ambiente Linux precisa ser configurado para interagir com o repositório Git em que a LookML está armazenada. Estas instruções foram escritas para repositórios Git do LookML armazenados no GitHub.

Nome e e-mail

O GitHub (e a maioria das outras implementações do Git) precisa saber seu nome e endereço de e-mail para registrar a atividade. Configure seu nome e e-mail no Git executando os seguintes comandos:

git config --global user.name "FIRST_NAME LAST_NAME"
git config --global user.email "EMAIL_ADDRESS"

Credenciais do Git

Na configuração inicial de CI/CD, as credenciais do Git foram criadas. A chave privada SSH gerada precisa ser configurada em um arquivo $HOME/.ssh/config. Para criar o arquivo, use estes comandos:

touch $HOME/.ssh/config
chmod 600 $HOME/.ssh/config

Insira o texto a seguir no arquivo $HOME/.ssh/config:

Host github.com
  User git
  IdentityFile ~/.ssh/KEY_NAME
  ControlMaster auto
  ControlPath ~/.ssh/ctrl-%r@%h:%p
  ControlPersist yes

Em vez de KEY_NAME, use o nome do arquivo de chave privada que você gerou com as instruções em Adicionar uma nova chave SSH à sua conta do GitHub. O arquivo de chave privada tem o mesmo nome do arquivo de chave pública, mas sem a extensão .pub. Por exemplo, se você usou a chave pública encontrada no arquivo id_ed25519.pub, a chave privada seria chamada id_ed25519.

Como configurar seu repositório Git local

Depois de configurar o repositório LookML, faça uma cópia dele no seu ambiente Linux. Para isso, execute este comando:

git clone GIT_URL

Por exemplo, o comando pode aparecer assim:

git clone git@github.com:my_org_name/sales_project.git

Isso vai copiar o repositório do LookML para um subdiretório, por exemplo, sales_project. Use o comando cd SUB_DIRECTORY para acessar o repositório. Neste exemplo, o comando seria cd sales_project.

No diretório do repositório, use os seguintes comandos:

Comando Finalidade
git checkout BRANCH_NAME Usado para alternar ramificações. Na maioria dos casos, a ramificação principal é chamada de main. No entanto, em sistemas mais antigos, ela pode ser chamada de master.
git fetch Usado para recuperar as mudanças mais recentes do servidor.
git pull Usado para aplicar mudanças aos arquivos locais extraídos. git pull faz implicitamente um git fetch.
git tag Usado para criar uma tag significativa para uma revisão específica.
git push Usado para enviar mudanças locais ao servidor.

Como configurar o Gazer

Para usar o Gazer, você precisa de credenciais de API para cada uma das instâncias de desenvolvimento, controle de qualidade e produção. Para instruções sobre como criar credenciais de API, consulte a página Configurações de administrador - Usuários. As credenciais da API podem já ter sido criadas pela pessoa que configurou o fluxo de trabalho de CI/CD. Nesse caso, você pode usar a credencial atual. Não é necessário gerar novas credenciais para cada pessoa.

Armazene as credenciais da API em um arquivo .netrc com permissões mínimas no seu diretório inicial. É possível criar um arquivo vazio com as permissões corretas usando estes comandos:

touch $HOME/.netrc
chmod 600 $HOME/.netrc

Adicione entradas como as seguintes ao arquivo, mas use seus próprios nomes de host do servidor do Looker para machine, a API client_id para o login e a API client_secret para a senha. Exemplo:

machine dev.example.looker.com
  login 80ka7nl6lj87ftmn
  password u7kw3mj5h2trfz0

machine qa.example.looker.com
  login fi3qtv5at5crvd1q
  password bdxtaeghnzyz0wm

machine example.looker.com
  login k7lr6yv57wvzy9p2
  password wcvr5qjd2isbs2s

Para testar se isso funciona, execute um comando do Gazer em cada servidor, como este:

gzr user me --host dev.example.looker.com

Isso vai gerar um resultado semelhante a este:

+----+---------------+---------+----------+------------------+--------------+
|  id|email          |last_name|first_name|personal_folder_id|home_folder_id|
+----+---------------+---------+----------+------------------+--------------+
|2345|jsm@example.com|Smith    |John      |              2161|           708|
+----+---------------+---------+----------+------------------+--------------+

Se o comando anterior não funcionar, talvez seja necessário adicionar --port 443 ao final do comando gzr, da seguinte maneira:

gzr user me --host dev.example.looker.com --port 443

Como configurar os Spectacles

Os Spectacles usam as mesmas APIs client_id e client_secret do Gazer. No diretório do Spectacles, crie um arquivo para cada nível chamado config-TIER.yaml, por exemplo, config-dev.yaml. Adicione o seguinte conteúdo aos arquivos, conforme apropriado para a instância do Looker daquele nível, como:

config-dev.yaml

base_url: https://dev.example.looker.com/
client_id: 80ka7nl6lj87ftmn
client_secret: u7kw3mj5h2trfz0

config-qa.yaml

base_url: https://qa.example.looker.com/
client_id: fi3qtv5at5crvd1q
client_secret: bdxtaeghnzyz0wm

config-prod.yaml

base_url: https://example.looker.com/
client_id: k7lr6yv57wvzy9p2
client_secret: wcvr5qjd2isbs2s

Para testar cada arquivo, execute o comando a seguir e substitua cada nome de arquivo:

$ spectacles connect --config-file config-dev.yaml

Você vai receber uma resposta semelhante a esta:

Connected to Looker version 23.18.60 using Looker API 4.0