Como chamar o Bazel usando scripts

Você pode chamar o Bazel a partir de scripts para executar uma compilação, executar testes ou consultar o gráfico de dependência. O Bazel foi projetado para permitir scripts eficazes, mas esta seção lista alguns detalhes que precisam ser considerados para tornar seus scripts mais robustos.

Como escolher a base de saída

A opção --output_base controla onde o processo do Bazel precisa gravar as saídas de um build, bem como vários arquivos de trabalho usados internamente pelo Bazel. Um deles é um bloqueio que protege contra a mutação simultânea da base de saída por vários processos do Bazel.

A escolha do diretório base de saída correto para seu script depende de vários fatores. Se você precisar colocar as saídas de build em um local específico, isso dirá a base de saída que você precisa usar. Se você estiver fazendo uma chamada "somente leitura" para o Bazel (como bazel query), os fatores de bloqueio serão mais importantes. Se for necessário executar várias instâncias do script simultaneamente, cada uma terá uma base de saída diferente (ou aleatória).

Se você usar o valor base de saída padrão, vai disputar o mesmo bloqueio usado pelos comandos interativos do Bazel do usuário. Se o usuário executar comandos de longa duração, como builds, o script precisará aguardar a conclusão desses comandos antes de continuar.

Observações sobre o modo de servidor

Por padrão, o Bazel usa um processo de servidor de longa duração como otimização. Ao executar o Bazel em um script, não se esqueça de chamar shutdown quando terminar o servidor ou especificar --max_idle_secs=5 para que os servidores inativos sejam encerrados imediatamente.

Qual código de saída vou receber?

Ele tenta diferenciar falhas devido ao código-fonte em consideração de erros externos que o impedem de ser executado corretamente. A execução do Bazel pode resultar nos seguintes códigos de saída:

Códigos de saída comuns a todos os comandos:

  • 0: sucesso
  • 2: problema de linha de comando, sinalizações ou combinações de comando inválidas ou ilegais ou variáveis de ambiente inválidas. Sua linha de comando precisa ser modificada.
  • 8: build interrompido, mas encerrado com um encerramento ordenado.
  • 9: o bloqueio do servidor é mantido, e o --noblock_for_lock foi transmitido.
  • 32: falha do ambiente externo não nesta máquina.

  • 33: o Bazel ficou sem memória e falhou. Você precisa modificar a linha de comando.

  • 34: reservado para uso interno do Google.

  • 35: reservado para uso interno do Google.

  • 36: problema ambiental local, suspeito de ser permanente.

  • 37: exceção não processada / erro interno do Bazel.

  • 38: reservado para uso interno do Google.

  • 41-44: reservado para uso interno do Google.

  • 45: erro ao publicar resultados no serviço de evento de build.

  • 47: reservado para uso interno do Google.

Códigos de retorno para os comandos bazel build, bazel test:

  • 1: falha no build.
  • 3: build OK, mas alguns testes falharam ou expiraram.
  • 4: build bem-sucedido, mas nenhum teste foi encontrado, embora o teste tenha sido solicitado.

Para bazel run:

  • 1: falha no build.
  • Se o build for bem-sucedido, mas o subprocesso executado retornar um código de saída diferente de zero, ele também será o código de saída do comando.

Para bazel query:

  • 3: sucesso parcial, mas a consulta encontrou um ou mais erros no conjunto de arquivos de entrada BUILD e, portanto, os resultados da operação não são 100% confiáveis. Isso provavelmente ocorre devido a uma opção --keep_going na linha de comando.
  • 7: falha no comando.

Versões futuras do Bazel podem adicionar outros códigos de saída, substituindo o código de saída de falha genérico 1 por um valor diferente de zero com um significado específico. Entretanto, todos os valores de saída diferentes de zero sempre constituirão um erro.

Como ler o arquivo .bazelrc

Por padrão, o Bazel lê o arquivo .bazelrc no diretório base do espaço de trabalho ou no diretório inicial do usuário. Se isso é desejável ou não para seu script. Se ele precisar ser perfeitamente hermético (como ao fazer builds de lançamento), desative a leitura do arquivo .bazelrc usando a opção --bazelrc=/dev/null. Se você quiser executar um build usando as configurações preferidas do usuário, o comportamento padrão é melhor.

Registro do comando

A saída do Bazel também está disponível em um arquivo de registro de comando que pode ser encontrado com este comando:

bazel info command_log

O arquivo de registros do comando contém os fluxos stdout e stderr intercalados do comando Bazel mais recente. Observe que executar bazel info substituirá o conteúdo desse arquivo, porque ele se tornará o comando mais recente do Bazel. No entanto, o local do arquivo de registros de comando não será alterado, a menos que você altere a configuração das opções --output_base ou --output_user_root.

Analisando a saída

A saída do Bazel é fácil de analisar para muitas finalidades. Duas opções que podem ser úteis para o script são --noshow_progress, que suprime mensagens de progresso, e --show_result n, que controla se as mensagens de "criação atualizada" são impressas. Essas mensagens podem ser analisadas para descobrir quais destinos foram criados com sucesso e o local dos arquivos de saída criados. Especifique um valor muito grande de n se você depende dessas mensagens.

Solução de problemas de desempenho com criação de perfil

Consulte a seção Performance Profiling.