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

Informar um problema Ver código-fonte Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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 no seu repositório para testar a compatibilidade das regras em um cenário de execução remota. As instruções nesta página se aplicam a projetos armazenados em repositórios do GitHub.

Pré-requisitos

Antes de concluir as etapas desta 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 na 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 pull com suas alterações para o arquivo presubmit.yml. Consulte o exemplo de solicitação de envio.

  2. Para ver os resultados da compilação, 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 fica disponível depois que a solicitação de envio é mesclada e os testes de CI são executados. Veja exemplos de resultados.

    Resultados de exemplo

  3. (Opcional) Defina a verificação de teste do bazel (RBE (Ubuntu 16.04)) como um teste necessário para ser aprovado antes de mesclar sua regra de proteção de ramificação. A configuração está localizada no GitHub em Configurações > Ramificações > Regras de proteção de ramificação, 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 o build ou os testes falharem, provavelmente é por um destes motivos:

  • As ferramentas de build ou teste necessárias não estão instaladas no contêiner padrão. Cria builds usando a execução de configuração rbe_ubuntu1604 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 posteriormente.

  • Os destinos de build ou teste estão usando regras que são incompatíveis com a execução remota. Consulte Como adaptar regras do Bazel para execução remota para detalhes sobre a compatibilidade com a execução remota.

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

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, verifique se você instalou 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 de 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, faça o seguinte:

  • 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 do último contêiner.

  • 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 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 envie-a para o 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 contêiner personalizado. Você vai precisar fornecê-la 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 servir imagens publicamente.

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

Como especificar a definição da plataforma de build

Você precisa incluir uma configuração da plataforma do Bazel na configuração do conjunto de ferramentas personalizado para que ele possa selecionar um conjunto adequado à plataforma de hardware/software desejada. Para gerar automaticamente uma plataforma válida, adicione ao WORKSPACE um destino rbe_autoconfig com o nome buildkite_config, que inclui mais atributos para selecionar seu contêiner personalizado. Para detalhes sobre essa configuração, leia a documentação atualizada do rbe_autoconfig.