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

Informar um problema Ver código-fonte

Esta página é destinada a proprietários e administradores 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 a projetos armazenados em repositórios do GitHub.

Pré-requisitos

Antes de concluir as etapas nesta página, faça 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 versão e teste que você quer testar em relação à execução remota.

  2. Adicione o repositório bazel-toolchains do GitHub 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 CI do BuildKite 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 as alterações para o arquivo presubmit.yml. Consulte exemplo de solicitação de envio.

  2. Para ver os resultados do build, clique em Detalhes na 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 bazel test (RBE (Ubuntu 16.04)) como um teste obrigatório para passar antes de mesclar na regra de proteção de ramificação. A configuração está localizada no GitHub em Configurações > Branches > 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 versões e testes com falha

Se a versão ou os testes falharem, provavelmente:

  • As ferramentas necessárias de build ou teste não estão instaladas no contêiner padrão. Builds usando a configuração rbe_ubuntu1604 executada por padrão dentro de 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, crie um contêiner personalizado com base no contêiner rbe-ubuntu16-04 e inclua essas ferramentas conforme descrito posteriormente.

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

Como usar um contêiner personalizado na configuração da 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 extrai-lo diretamente do Container Registry ou compilá-lo a partir da origem. As próximas seções descrevem as duas opções.

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

Como executar o rbe-ubuntu16-04 no 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 com base na 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 destinos de contêineres de conjunto de ferramentas e crie o contêiner, conforme explicado em Contêineres de conjuntos 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ê é novo no Docker, leia o seguinte:

Por exemplo, o snippet Dockerfile a seguir instala o 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

Enviar o contêiner personalizado para o Container Registry

Depois de personalizar o contêiner, crie a imagem do contêiner e a envie 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 seu contêiner personalizado. Será necessário fornecê-lo posteriormente na definição da plataforma de compilação.

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

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

Como especificar a definição da plataforma de compilação

É preciso incluir uma configuração de plataforma Bazel em sua configuração de conjunto de ferramentas personalizado, o que permite que o Bazel selecione um conjunto de ferramentas apropriado à 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 caracteres para selecionar o contêiner personalizado. Para ver detalhes sobre essa configuração, leia a documentação atualizada para rbe_autoconfig.