Bazel을 사용해야 하는 이유

문제 신고 소스 보기 Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel은 업계를 선도하는 생태계에서 여러 언어, 저장소, 플랫폼을 지원하는 통합 테스트가 포함된 빠르고 올바르며 확장 가능한 빌드 도구입니다.

Bazel은 빠릅니다.

Bazel은 각 빌드 명령어에 필요한 입력 파일을 정확히 알고 있으므로 각 빌드 간에 입력 파일 세트가 변경된 경우에만 다시 실행하여 불필요한 작업을 방지합니다. 동일한 컴퓨터 내에서 또는 원격 빌드 노드에서 최대한 많은 병렬로 빌드 명령어를 실행합니다. 빌드 구조가 허용하는 경우 수천 개의 빌드 또는 테스트 명령어를 동시에 실행할 수 있습니다.

이는 메모리, 디스크, 원격 빌드 농장(있는 경우)의 여러 캐싱 레이어에서 지원됩니다. Google에서는 일반적으로 99% 이상의 캐시 적중률을 달성합니다.

Bazel이 올바름

Bazel은 바이너리가 자체 소스 코드에서 빌드되도록 합니다. Bazel 작업은 개별 샌드박스에서 실행되며 Bazel은 빌드의 모든 입력 파일을 추적하고 필요할 때만 항상 빌드 명령어를 다시 실행합니다. 이렇게 하면 바이너리가 최신 상태로 유지되므로 동일한 소스 코드가 항상 동일한 바이너리로 결과화됩니다.

끝없는 make clean 호출과 빌드되지 않은 소스 코드에서 실제로 해결된 유령 버그 추적을 종료하세요.

Bazel은 확장 가능

자체 규칙과 매크로를 작성하여 다양한 프로젝트에서 특정 요구사항에 맞게 Bazel을 맞춤설정하여 Bazel의 모든 기능을 활용하세요.

Bazel 규칙은 Python의 하위 집합인 Google의 자체 프로그래밍 언어인 Starlark로 작성됩니다. Starlark를 사용하면 대부분의 개발자가 규칙을 작성할 수 있으며 생태계 전반에서 사용할 수 있는 규칙을 만들 수 있습니다.

통합 테스트

Bazel의 통합 테스트 실행기는 재실행이 필요한 테스트만 알고 실행하며, 원격 실행(사용 가능한 경우)을 사용하여 테스트를 동시에 실행합니다. 원격 실행을 사용하여 테스트를 수천 번 빠르게 실행하여 조기에 불안정 항목을 감지합니다.

Bazel은 테스트 결과를 중앙 위치에 업로드하는 기능을 제공하여 CI 또는 개별 개발자 중 누구나 테스트 결과를 효율적으로 전달할 수 있도록 지원합니다.

다양한 언어 지원

Bazel은 C++, Java, Kotlin, Python, Go, Rust를 비롯한 여러 일반적인 프로그래밍 언어를 지원합니다. 한 언어의 관용적인 빌드 도구로 제한되지 않고 동일한 Bazel 호출에서 여러 바이너리 (예: 백엔드, 웹 UI, 모바일 앱)를 빌드할 수 있습니다.

다중 저장소 지원

Bazel은 여러 위치에서 소스 코드를 수집할 수 있습니다. 종속 항목을 공급업체에 제공할 필요는 없지만 (제공할 수도 있음) 대신 Bazel을 소스 코드 또는 사전 빌드된 아티팩트 (예: Git 저장소 또는 Maven Central)의 위치로 가리키면 나머지는 Bazel에서 처리합니다.

멀티 플랫폼 지원

Bazel은 Linux, macOS, Windows, Android를 비롯한 여러 플랫폼용 프로젝트를 동시에 빌드할 수 있습니다. 또한 한 플랫폼에서 빌드를 실행하는 동안 다른 플랫폼용 코드를 빌드할 수 있는 강력한 교차 컴파일 기능을 제공합니다.

광범위한 생태계

업계 리더는 Bazel을 좋아하며 Bazel을 사용하고 기여하는 대규모 개발자 커뮤니티를 구축하고 있습니다. Bazel에서 사용할 수 있는 컨설팅 및 SaaS 서비스를 비롯한 도구, 서비스, 문서를 찾아보세요. 오픈소스 소프트웨어 저장소에서 프로그래밍 언어 지원과 같은 확장 프로그램을 살펴보세요.