Como configurar a CI do Bazel para testar regras de execução remota

Informar um problema Acessar a origem

Esta página é destinada a proprietários e mantenedores de repositórios de regras do Bazel. Ele descreve como configurar o sistema de integração contínua (CI) do Bazel para seu repositório a fim de testar as regras de compatibilidade com um cenário de execução remota. As instruções nesta página se aplicam aos projetos armazenados nos repositórios do GitHub.

Pré-requisitos

Antes de concluir as etapas nesta página, verifique o seguinte:

Como configurar a CI do Bazel para testes

  1. No arquivo .bazelci/presubmit.yml, faça o seguinte:

    a. Adicione uma configuração chamada rbe_ubuntu1604.

    b. Na configuração rbe_ubuntu1604, adicione os destinos de build e teste que você quer testar na execução remota.

  2. Adicione o repositório do GitHub bazel-toolchains ao arquivo WORKSPACE, fixado à versão mais recente. Adicione também um destino rbe_autoconfig com o nome buildkite_config. Este exemplo cria a configuração do conjunto de ferramentas para execução remota com o BuildKite CI para rbe_ubuntu1604.

load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
rbe_autoconfig(name = "buildkite_config")
  1. Envie uma solicitação de envio com suas alterações para o arquivo presubmit.yml. Consulte um exemplo de solicitação de envio.

  2. Para ver os resultados do build, clique em Detalhes para a verificação de solicitação de envio do RBE (Ubuntu 16.04) no GitHub, conforme mostrado na figura abaixo. Esse link é disponibilizado após a mesclagem da solicitação de envio e a execução dos testes de CI. Confira exemplos de resultados.

    Resultados de exemplo

  3. (Opcional) Defina a verificação do bazel test (RBE (Ubuntu 16.04)) como um teste necessário para ser aprovado antes de mesclar a regra de proteção de ramificação. A configuração está localizada no GitHub em Settings > Branches > Branch Protection rules, conforme mostrado na figura a seguir.

    Configurações das regras de proteção de ramificação

Como solucionar problemas de builds e testes com falha

Se a versão ou os testes falharem, é provável que:

  • As ferramentas de build ou teste obrigatórias não estão instaladas no contêiner padrão. Os builds que usam a configuração rbe_ubuntu1604 são executados por padrão em um contêiner rbe-ubuntu16-04, que inclui ferramentas comuns a muitos builds do Bazel. No entanto, se as regras exigirem ferramentas que não estão no contêiner padrão, crie um contêiner personalizado com base no contêiner rbe-ubuntu16-04 e inclua essas ferramentas conforme descrito mais adiante.

  • Destinos de compilação ou teste usam regras incompatíveis com a execução remota. Consulte Como adaptar regras do Bazel para execução remota para mais detalhes sobre a compatibilidade com a execução remota.

Como usar um contêiner personalizado na configuração de CI do rbe_ubuntu1604

O contêiner rbe-ubuntu16-04 está disponível publicamente no seguinte URL:

http://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04

É possível extraí-lo diretamente do Container Registry ou criá-lo da origem. As próximas seções descrevem as duas opções.

Antes de começar, instale gcloud, docker e git. Se você estiver criando o contêiner a partir da origem, também precisará instalar a versão mais recente do Bazel.

Como extrair o rbe-ubuntu16-04 do Container Registry

Para extrair o contêiner rbe-ubuntu16-04 do Container Registry, execute o seguinte comando:

gcloud docker -- pull gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum

Substitua sha256-checksum pelo valor da soma de verificação SHA256 para o contêiner mais recente.

Como criar o contêiner rbe-ubuntu16-04 a partir da origem

Para criar o contêiner rbe-ubuntu16-04 a partir da origem, faça o seguinte:

  1. Clone o repositório bazel-toolchains:

    git clone https://github.com/bazelbuild/bazel-toolchains
    
  2. Configure os destinos do contêiner do conjunto de ferramentas e crie o contêiner conforme explicado em Contêineres do conjunto de ferramentas.

  3. Extraia o contêiner recém-criado:

    gcloud docker -- pull gcr.io/project-id/custom-container-namesha256-checksum
    

Como executar o contêiner personalizado

Para executar o contêiner personalizado, siga um destes procedimentos:

  • Se você extraiu o contêiner do Container Registry, execute o seguinte comando:

    docker run -it gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum/bin/bash
    

    Substitua sha256-checksum pelo valor da soma de verificação SHA256 para o contêiner mais recente.

  • Se você criou o contêiner a partir da origem, execute o seguinte comando:

    docker run -it gcr.io/project-id/custom-container-name@sha256:sha256sum /bin/bash
    

Como adicionar recursos ao contêiner personalizado

Use um Dockerfile ou rules_docker para adicionar recursos ou versões alternativas dos recursos originais ao contêiner rbe-ubuntu16-04. Se você não conhece o Docker, leia o seguinte:

Por exemplo, o snippet de Dockerfile a seguir instala my_tool_package:

FROM gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum
RUN apt-get update && yes | apt-get install -y my_tool_package

Como enviar o contêiner personalizado para o Container Registry

Depois de personalizar o contêiner, crie a imagem do contêiner e a envie ao Container Registry da seguinte maneira:

  1. Crie a imagem do contêiner:

    docker build -t custom-container-name.
    docker tag custom-container-name gcr.io/project-id/custom-container-name
    
  2. Envie a imagem do contêiner para o Container Registry:

    gcloud docker -- push gcr.io/project-id/custom-container-name
    
  3. Acesse o seguinte URL para verificar se o contêiner foi enviado:

    https://console.cloud.google.com/gcr/images/project-id/GLOBAL/custom-container-name

  4. Anote a soma de verificação SHA256 do seu contêiner personalizado. Você precisará fornecê-lo na definição da plataforma de build mais tarde.

  5. Configure o contêiner para acesso público conforme descrito em "acessível publicamente", conforme explicado em Como exibir imagens publicamente.

    Para ver mais informações, consulte Como enviar e extrair imagens.

Como especificar a definição da plataforma de build

É preciso incluir uma configuração da plataforma Bazel na configuração do conjunto de ferramentas personalizado. Isso permite que o Bazel selecione um conjunto de ferramentas apropriado para a plataforma de hardware/software desejada. Para gerar automaticamente uma plataforma válida, adicione ao seu WORKSPACE um destino rbe_autoconfig com o nome buildkite_config, que inclui outros atrizes para selecionar seu contêiner personalizado. Para mais detalhes sobre essa configuração, leia a documentação atualizada do rbe_autoconfig.