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

Relatar um problema Conferir código-fonte Por noite · 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. Ela descreve como configurar o sistema de integração contínua (CI) do Bazel para seu repositório para testar a compatibilidade das regras com uma execução remota diferente. As instruções nesta página se aplicam a projetos armazenados no 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 bazel-toolchains. repositório do GitHub ao seu arquivo WORKSPACE, fixado à versão mais recente. Além disso, adicione um destino rbe_autoconfig com o nome buildkite_config. Neste 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 mudanças para o arquivo presubmit.yml. Consulte exemplo de solicitação de envio.

  2. Para ver os resultados do build, clique em Details do RBE (Ubuntu). 16.04) de solicitação de envio no GitHub, conforme mostrado na figura abaixo. Este link fica disponível depois que a solicitação de envio é mesclada e os testes de CI foram executados. Consulte resultados de exemplo.

    Resultados de exemplo

  3. (Opcional) Defina a verificação de teste do bazel (RBE (Ubuntu 16.04)) como um teste. para serem aprovados antes da mesclagem na regra de proteção de ramificação. Configuração está localizado no GitHub em Configurações > Ramificações > Regras de proteção de ramificação como mostrado na figura a seguir.

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

Como solucionar problemas de builds e testes com falha

Se o build ou os testes falharem, o motivo provavelmente será o 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 rbe-ubuntu16-04 contêiner, que inclui ferramentas comuns a muitos builds do Bazel. No entanto, se suas regras exigirem ferramentas que não estejam no contêiner padrão, você precisará criar um contêiner personalizado com base rbe-ubuntu16-04 e inclua essas ferramentas conforme descrito posteriormente.

  • Destinos de build ou teste estão usando regras incompatíveis com o modo remoto e sua execução. Consulte Como adaptar regras do Bazel para execução remota para detalhes sobre 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. A 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 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, 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
    

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 envie-a para 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á fornecer essa informação na definição da plataforma de build mais tarde.

  5. Configure o contêiner para acesso público, conforme descrito publicamente acessíveis, conforme explicado 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 da plataforma Bazel no seu a configuração de um conjunto de ferramentas personalizado, que permite ao Bazel selecionar um conjunto de ferramentas adequados para a plataforma de hardware/software desejada. Para gerar uma plataforma válida automaticamente, é possível adicionar ao WORKSPACE um Meta de rbe_autoconfig com o nome buildkite_config, que inclui informações atributos para selecionar seu contêiner personalizado. Para mais detalhes sobre essa configuração, leia a documentação atualizada para rbe_autoconfig.