El sistema Bazel se implementa como un proceso de servidor de larga duración. Esto le permite
muchas optimizaciones que no son posibles
con una implementación por lotes
como el almacenamiento en caché de archivos BUILD, gráficos de dependencia y otros metadatos de uno
construir para el siguiente. Esto mejora la velocidad de las compilaciones incrementales y permite
comandos diferentes, como build
y query
, para compartir la misma caché de
paquetes cargados, lo que hace que las consultas sean muy rápidas.
Cuando ejecutas bazel
, ejecutas el cliente. El cliente encuentra el servidor
basada en la base de salida, que, de forma predeterminada, se determina por la ruta de acceso de la base
y tu userid. Si compilas en varios lugares de trabajo,
Tendrá varias bases de salida y, por lo tanto, varios procesos del servidor de Bazel.
Varios usuarios en la misma estación de trabajo pueden compilar simultáneamente en la misma
ya que sus bases de salida serán diferentes (diferentes ID de usuario).
Si el cliente no puede encontrar una instancia de servidor en ejecución, inicia una nueva. Integra
lo hace comprobando si la base de salida ya existe, lo que implica que
ya se desempaquetaron. De lo contrario, si la base de salida no existe,
el cliente descomprime los archivos del archivo y establece sus mtime
en una fecha de 9 años.
en el futuro. Una vez instalada, el cliente confirma que los mtime
de la
los archivos descomprimidos son iguales a la fecha lejana para garantizar que no se manipule la instalación
el problema.
El proceso del servidor se detendrá tras un período de inactividad (3 horas, de forma predeterminada,
que se puede modificar con la opción de inicio --max_idle_secs
). Para la mayoría
el hecho de que haya un servidor en ejecución es invisible para el usuario,
a veces, es útil tener esto en mente. Por ejemplo, si ejecutas secuencias de comandos
que realizan muchas compilaciones automáticas en diferentes directorios, es importante
para asegurarse de no acumular muchos servidores inactivos. puedes hacerlo
cerrándolos explícitamente cuando hayas terminado con ellos o especificando
un tiempo de espera corto.
El nombre de un proceso del servidor de Bazel aparece en el resultado de ps x
o ps -e f
.
como bazel(dirname)
, donde dirname es el nombre base del
que contiene la raíz del directorio de tu lugar de trabajo. Por ejemplo:
ps -e f
16143 ? Sl 3:00 bazel(src-johndoe2) -server -Djava.library.path=...
Esto hace que sea más fácil averiguar qué proceso del servidor pertenece a un determinado
Workspace. Ten en cuenta que con algunas otras opciones para ps
, el servidor Bazel
pueden llamarse únicamente java
). Los servidores de Bazel pueden dejar de usar el
shutdown.
Cuando se ejecuta bazel
, el cliente primero verifica que el servidor sea el adecuado
versión; De lo contrario, el servidor se detiene y se inicia uno nuevo. Esto garantiza que
el uso de un proceso de servidor de larga duración no interfiere en el
y el control de versiones.