Você pode chamar o Bazel usando scripts para fazer uma versão, executar testes ou consultar. o gráfico de dependência. O Bazel foi projetado para permitir um scripting eficaz, mas esta seção lista alguns detalhes a serem considerados para tornar seus scripts mais robustos.
Escolher a base de saída
A opção --output_base
controla onde o processo do Bazel precisa gravar os
saídas de um build, bem como vários arquivos de trabalho usados internamente por
o Bazel, um dos quais é um bloqueio que protege contra mutações simultâneas do
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
determinar a base de saída que você precisa usar. Se você estiver fazendo uma conversão Ligar para
Bazel (como bazel query
), os fatores de bloqueio serão mais importantes. Em
principalmente se for preciso executar várias instâncias do script ao mesmo tempo,
lembre-se de que cada processo do servidor Blaze pode lidar com no máximo um
invocação de cada vez.
Dependendo da sua situação, pode fazer sentido para cada instância do seu script
esperar a vez dele ou pode fazer sentido usar --output_base
para executar várias
servidores Blaze e usá-los.
Se você usar o valor base de saída padrão, estará disputando o mesmo usado pelos comandos interativos do Bazel do usuário. Se o usuário tiver problemas comandos de longa duração, como builds, o script terá que aguardar sejam concluídos antes de continuar.
Observações sobre o modo de servidor
Por padrão, o Bazel usa um processo do 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 de usar o servidor, ou especifique --max_idle_secs=5
para que
os servidores ociosos são desligados imediatamente.
Que código de saída vou receber?
O Bazel tenta diferenciar falhas devido ao código-fonte em contra erros externos que impedem a execução correta 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, sinalizações incorretas ou ilegais ou combinação de comandos ou Variáveis de ambiente incorretas. Sua linha de comando precisa ser modificada.8
: o build foi interrompido, mas foi encerrado com um encerramento ordenado.9
: o bloqueio do servidor é mantido e o--noblock_for_lock
foi transmitido.32
: falha de ambiente externo nesta 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, suspeita de ser permanente.37
: exceção não processada / erro interno do Bazel.38
: erro temporário ao publicar resultados no serviço de evento de build.39
: os blobs exigidos pelo Bazel são removidos do cache remoto.41-44
: reservado para uso interno do Google.45
: erro persistente ao publicar resultados no serviço de evento de build.47
: reservado para uso interno do Google.49
: reservado para uso interno do Google.
Códigos de retorno para os comandos bazel build
, bazel test
:
1
- Falha na criação.3
: build OK, mas alguns testes falharam ou expiraram.4
: o build foi bem-sucedido, mas nenhum teste foi encontrado. solicitado.
Para bazel run
:
1
- Falha na criação.- Se a compilação for bem-sucedida, mas o subprocesso executado retornar uma saída diferente de zero código, 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 na conjunto de arquivos BUILD de entrada e, portanto, os resultados da operação não serão 100% confiáveis. Isso provavelmente se deve 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 falhas genéricas
código de saída 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
(em inglês) da base
do espaço de trabalho ou do diretório inicial do usuário. Se isso é ou não
desejável é uma escolha para seu roteiro. se seu script precisar ser perfeitamente
hermético (como ao fazer compilações de lançamento), você deve desativar 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 comando, que pode ser encontrado em o seguinte comando:
bazel info command_log
O arquivo de registros do comando contém os fluxos stdout e stderr intercalados do
o comando mais recente do Bazel. Observe que executar bazel info
substituirá o
desse arquivo, já que ele se torna o comando mais recente do Bazel.
No entanto, o local do arquivo de registro do comando não será alterado, a menos que você altere
a configuração das opções --output_base
ou --output_user_root
.
Analisando saída
A saída do Bazel é muito fácil de analisar para vários fins. Duas opções que podem
úteis para seu script são --noshow_progress
, que suprime o progresso
mensagens, e --show_result n
, que controla se ou
e não "criar atualizados" as mensagens são impressas. essas mensagens podem ser analisadas
descobrir quais destinos foram criados e o local da saída
arquivos criados por ele. Especifique um valor muito alto de n se você depende
essas mensagens.
Como solucionar problemas de desempenho por meio da criação de perfil
Consulte a seção Criação de perfil de desempenho.