É possível chamar o Bazel de scripts para executar uma versã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 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 deve gravar as saídas de uma versão, 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 o script depende de vários
fatores. Se você precisar colocar as saídas de build em um local específico, isso ditará a base de saída que você precisa usar. Se você estiver fazendo uma chamada "somente leitura" no Bazel (como bazel query
), os fatores de bloqueio serão mais importantes. Especificamente, se você precisar executar várias instâncias do script simultaneamente,
será necessário atribuir a cada uma delas uma base de saída diferente (ou aleatória).
Se você usar o valor base padrão de saída, estará concorrendo pelo mesmo bloqueio usado pelos comandos Bazel interativos do usuário. Se o usuário emitir comandos de longa duração, como builds, o script precisará aguardar a conclusão desses comandos para continuar.
Observações sobre o modo do 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 os servidores inativos sejam encerrados imediatamente.
Qual código de saída vou receber?
O Bazel tenta diferenciar falhas devido ao código-fonte em consideração devido a erros externos que impedem a execução correta dele. 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 de linha de comando, sinalização de combinação inválida ou ilegal, combinação de comandos 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 externa do ambiente fora desta máquina.33
: o Bazel ficou sem memória e falhou. Você precisa modificar sua linha de comando.34
: reservado para uso interno do Google.35
: reservado para uso interno do Google.36
: problema ambiental local, supostamente permanente.37
: exceção não processada/erro interno no 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 os 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 ao criar.3
: build OK, mas alguns testes falharam ou expiraram.4
: build bem-sucedido, mas nenhum teste foi encontrado, mesmo que o teste tenha sido solicitado.
Para bazel run
:
1
: falha ao criar.- Se a versão for bem-sucedida, 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 BUILD de entrada 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 do comando.
As versões futuras do Bazel poderão 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
no diretório básico do espaço de trabalho ou no diretório principal do usuário. Independentemente de isso ser desejável,
é uma opção para seu script. Se seu script precisar ser perfeitamente
hermético (por exemplo, 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 de comandos
A saída do Bazel também está disponível em um arquivo de registros que pode ser encontrado com o seguinte comando:
bazel info command_log
O arquivo de registros do comando contém os streams intercalados stdout e stderr do comando mais recente do Bazel. A execução de bazel info
substituirá o conteúdo desse arquivo, que se torna o comando mais recente do Bazel.
No entanto, o local do arquivo de registros de comandos não será alterado a menos que você mude
a configuração das opções --output_base
ou --output_user_root
.
Análise da saída
A saída do Bazel é muito fácil de analisar para muitas finalidades. Duas opções que podem
ser úteis para seu script são --noshow_progress
, que suprime as mensagens
de progresso, e --show_result n
, que controla se
as mensagens "atualizadas" são impressas. Essas mensagens podem ser analisadas para
descobrir quais destinos foram criados 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 a criação de perfil
Consulte a seção Criação de perfil de desempenho.