É possível chamar o Bazel de scripts para realizar uma build, executar testes ou consultar o gráfico de dependência. O Bazel foi projetado para permitir a criação de scripts eficazes, mas esta seção lista alguns detalhes a serem 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 grava as saídas de um build, bem como vários arquivos de trabalho usados internamente pelo Bazel. Um deles é um bloqueio que protege contra mutações simultâneas da base de saída por vários processos do Bazel.
Escolher o 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 vai
determinar 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. Em especial, se você precisar executar várias instâncias do script simultaneamente, atribua a cada uma uma base de saída diferente (ou aleatória).
Se você usar o valor padrão da base de saída, vai disputar o mesmo bloqueio usado pelos comandos interativos do Bazel do usuário. Se o usuário emitir comandos de longa duração, como builds, seu script terá que esperar 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 uma otimização. Ao executar o Bazel em um script, não se esqueça de chamar shutdown
quando terminar de usar o servidor ou especifique --max_idle_secs=5
para que
servidores ociosos sejam desligados imediatamente.
Qual código de saída vou receber?
O Bazel tenta diferenciar falhas devido ao código-fonte em consideração de erros externos que impedem a execução adequada do Bazel. 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
: sucesso2
: problema na linha de comando, flags ou combinação de comandos incorretas ou ilegais ou variáveis de ambiente incorretas. Sua linha de comando precisa ser modificada.8
: o build foi interrompido, mas encerramos com um desligamento ordenado.9
: o bloqueio do servidor foi mantido e--noblock_for_lock
foi transmitido.32
: falha no 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, suspeita de ser permanente.37
- Exceção não processada / erro interno do Bazel.38
: reservado para uso interno do Google.39
- Os blobs exigidos pelo Bazel são removidos do cache remoto.41-44
: reservado para uso interno do Google.45
: erro ao publicar resultados no serviço de eventos de build.47
: reservado para uso interno do Google.
Códigos de retorno para comandos bazel build
, bazel test
:
1
: falha na criação.3
- Build OK, but some tests failed or timed out.4
- O build foi concluído, mas nenhum teste foi encontrado, mesmo que o teste tenha sido solicitado.
Para bazel run
:
1
: falha na criação.- Se o build for bem-sucedido, mas o subprocesso executado retornar um código de saída diferente de zero, esse será o código de saída do comando também.
Para bazel query
:
3
: sucesso parcial, mas a consulta encontrou um ou mais erros no conjunto de arquivos BUILD de entrada. 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érica 1
por um valor diferente de zero com um significado específico.
No entanto, 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
do diretório de espaço de trabalho
base ou do diretório inicial do usuário. Se isso é desejável ou não é uma escolha 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 realizar
um build usando as configurações preferidas do usuário, o comportamento padrão será melhor.
Registro de comando
A saída do Bazel também está disponível em um arquivo de registro de comandos que pode ser encontrado com o seguinte comando:
bazel info command_log
O arquivo de registros de comando contém os fluxos stdout e stderr intercalados do
comando Bazel mais recente. A execução de bazel info
vai substituir o
conteúdo desse arquivo, já que ele se torna o comando mais recente do Bazel.
No entanto, o local do arquivo de registro de comandos não vai mudar, 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 seu script são --noshow_progress
, que suprime mensagens de progresso, e --show_result n
, que controla se as mensagens "build up-to-date" são impressas ou não. 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ê depender dessas mensagens.
Solução de problemas de desempenho por criação de perfil
Consulte a seção Criação de perfis de desempenho.