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 para que seu repositório teste a compatibilidade das regras em um cenário de execução remota. As instruções desta 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 para 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 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 um 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 pull é mesclada e os testes de CI são executados. Confira 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

Solução de 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. Compilações que usam a configuração rbe_ubuntu1604 são executadas 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 presentes no contêiner padrão, você precisará criar um contêiner personalizado com base no rbe-ubuntu16-04 e incluir essas ferramentas, conforme descrito mais adiante.

  • Os destinos de build ou teste estão usando regras que são incompatíveis com a execução remota. Consulte Como adaptar as regras do Bazel para a execução remota para saber mais 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 extraí-lo diretamente do Container Registry ou criá-lo a partir da fonte. 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 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 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
    

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 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 dele 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

É necessário incluir uma configuração da 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 WORKSPACE um destino rbe_autoconfig com o nome buildkite_config, que inclui outros atributos para selecionar o contêiner personalizado. Para detalhes sobre essa configuração, leia a documentação atualizada do rbe_autoconfig.