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

Informar um problema Ver fonte Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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 e testar as regras de compatibilidade 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 nesta página, verifique o seguinte:

Configurar o 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 com a 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 uma configuração de cadeia de ferramentas para execução remota com 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 mudanças no arquivo presubmit.yml. Consulte um exemplo de solicitação de envio.

  2. Para ver os resultados do build, clique em Detalhes na verificação da 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. Confira exemplos de resultados.

    Resultados de exemplo

  3. (Opcional) Defina a verificação bazel test (RBE (Ubuntu 16.04)) como um teste necessário para aprovação antes da mesclagem na 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 de regras de proteção de ramificação

Solução de problemas de builds e testes com falha

Se a criação ou os testes falharem, provavelmente será devido ao seguinte:

  • As ferramentas de build ou teste necessá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 suas regras exigirem ferramentas não presentes 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.

  • Os destinos de build ou teste estão usando regras incompatíveis com a execução remota. Consulte 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 de CI 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 extrai-lo diretamente do Container Registry ou compilá-lo. As seções a seguir descrevem as duas opções.

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

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 do contêiner mais recente.

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

Para criar o contêiner rbe-ubuntu16-04 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 dos contêineres da cadeia de ferramentas e crie o contêiner conforme explicado em Contêineres da cadeia de ferramentas.

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

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

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 contêiner mais recente.

  • Se você compilou 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

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 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 por push:

    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ê precisará fornecê-lo na definição da plataforma de build mais tarde.

  5. Configure o contêiner para acesso público conforme descrito em Como disponibilizar 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 de plataforma do Bazel na configuração do conjunto de ferramentas personalizado, o que permite que o Bazel selecione um conjunto de ferramentas adequado à 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 atributos para selecionar seu contêiner personalizado. Para detalhes sobre essa configuração, leia a documentação atualizada do rbe_autoconfig.