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:
- Seu repositório do GitHub faz parte da organização do GitHub do Bazel.
- Você configurou o Buildkite para seu repositório, conforme descrito em Integração contínua do Bazel.
Como configurar a CI do Bazel para testes
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.Adicione o repositório do GitHub
bazel-toolchains
ao arquivoWORKSPACE
, fixado na versão mais recente. Adicione também um destinorbe_autoconfig
com o nomebuildkite_config
. Este exemplo cria a configuração do conjunto de ferramentas para execução remota com o BuildKite CI pararbe_ubuntu1604
.
load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
rbe_autoconfig(name = "buildkite_config")
Envie uma solicitação de pull com suas alterações para o arquivo
presubmit.yml
. Consulte um exemplo de solicitação de envio.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.
(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.
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êinerrbe-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 norbe-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:
Clone o repositório
bazel-toolchains
:git clone https://github.com/bazelbuild/bazel-toolchains
Configure os destinos dos contêineres da cadeia de ferramentas e crie o contêiner, conforme explicado em Contêineres da cadeia de ferramentas.
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:
Crie a imagem do contêiner:
docker build -t custom-container-name.
docker tag custom-container-name gcr.io/project-id/custom-container-name
Envie a imagem do contêiner para o Container Registry:
gcloud docker -- push gcr.io/project-id/custom-container-name
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
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.
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
.