클라이언트/서버 구현

Bazel 시스템은 장기 서버 프로세스로 구현됩니다. 이를 통해 한 빌드에서 다음 빌드로 BUILD 파일, 종속 항목 그래프 및 기타 메타데이터를 캐시하는 등 일괄 처리 구현에서는 불가능한 여러 가지 최적화 작업을 실행할 수 있습니다. 이렇게 하면 증분 빌드 속도가 향상되고 buildquery과 같은 다양한 명령어가 로드된 패키지의 동일한 캐시를 공유할 수 있으므로 쿼리가 매우 빠르게 수행됩니다.

bazel를 실행하면 클라이언트가 실행됩니다. 클라이언트는 기본 베이스 공간 디렉터리 및 userid의 경로에 따라 기본적으로 결정되는 출력 기반을 기준으로 서버를 검색하므로 여러 작업공간에서 빌드하면 출력 기반, 따라서 여러 Bazel 서버 프로세스 동일한 워크스테이션에서 여러 사용자가 동시에 빌드할 수 있습니다. 출력 베이스가 달라지기 때문입니다 (사용자 ID가 다름). 클라이언트가 실행 중인 서버 인스턴스를 찾을 수 없으면 새 인스턴스를 시작합니다. 일정 시간 동안 활동이 없으면 서버 프로세스가 중지됩니다 (기본적으로 3시간). 이 옵션은 시작 옵션 --max_idle_secs를 사용하여 수정할 수 있습니다.

대부분의 경우 서버가 실행되고 있다는 사실은 사용자에게 보이지 않지만 염두에 두어야 할 때가 있습니다. 예를 들어 여러 디렉터리에서 자동화된 빌드를 많이 실행하는 스크립트를 실행하는 경우 많은 유휴 서버가 축적되지 않도록 하는 것이 중요합니다. 작업이 끝나면 명시적으로 종료하거나 짧은 제한 시간을 지정하면 됩니다.

Bazel 서버 프로세스의 이름이 ps x 또는 ps -e f의 출력에 bazel(dirname)으로 표시됩니다. 여기서 dirname은 다음을 포함하는 디렉터리의 기본 이름입니다. 작업공간 디렉터리의 루트입니다. 예:

ps -e f
16143 ?        Sl     3:00 bazel(src-johndoe2) -server -Djava.library.path=...

이렇게 하면 지정된 작업공간에 속한 서버 프로세스를 더 쉽게 찾을 수 있습니다. ps에 대한 다른 특정 옵션을 사용하면 Bazel 서버 프로세스의 이름을 java으로 지정할 수 있습니다. Bazel 서버는 종료 명령어를 사용하여 중지할 수 있습니다.

bazel을 실행할 때 클라이언트는 먼저 서버가 적절한 버전인지 확인합니다. 일치하지 않으면 서버가 중지되고 새 서버가 시작됩니다. 이렇게 하면 장기 실행 서버 프로세스의 사용이 적절한 버전 관리를 방해하지 않습니다.