Bazel(소프트웨어)
Bazel (software)| 개발자 | 구글 |
|---|---|
| 초기 릴리즈 | 3월, 전( |
| 안정된 릴리스 | 5.0.0 / 2022년 1월 ; 전([1] |
| 저장소 | |
| 기입처 | 자바[2] |
| 운영 체제 | 크로스 플랫폼 |
| 면허증. | Apache 라이센스 2.0 |
| 웹 사이트 | bazel |
Bazel(/bezzll/)[3]은 소프트웨어 [2]구축 및 테스트 자동화를 위한 무료 소프트웨어 도구입니다.구글은 내부적으로 빌드[4] 툴 Blaze를 사용하고 있으며 Blaze의 [5]아나그램으로 명명된 Bazel이라는 이름의 Blaze 툴의 오픈 소스 포트를 출시했다.Bazel은 2015년 3월에 처음 출시되어 2015년 [6]9월까지 베타 상태를 달성했습니다.
Make, Apache Ant 또는 Apache Maven과 [2][5]같은 빌드 도구와 유사하게 Bazel은 일련의 규칙을 사용하여 소스 코드에서 소프트웨어 애플리케이션을 빌드합니다.규칙과 매크로는 [5]Python의 방언인 Starlark 언어(이전의 Skylark[7])로 작성됩니다.Java, C, C++, Go, Python, Objective-C 및 Bourne 셸 [5][6]스크립트의 프로그래밍 언어로 작성된 소프트웨어를 빌드하기 위한 기본 제공 규칙이 있습니다.Bazel은 Android 및 iOS 운영 [8]체제용 배포에 적합한 소프트웨어 애플리케이션 패키지를 만들 수 있습니다.
근거
Bazel의 목표 중 하나는 빌드 대상 입력 및 출력이 완전히 지정되고 따라서 [8]빌드 시스템에 정확하게 알려진 빌드 시스템을 만드는 것입니다.이를 통해 빌드 시스템의 종속성 그래프에서 오래된 빌드 아티팩트를 보다 정확하게 분석하고 확인할 수 있습니다.종속성 그래프 분석을 보다 결정적으로 만들면 불필요한 빌드 목표의 재실행을 방지하여 빌드 시간을 개선할 수 있습니다.빌드 대상이 오래된 입력 아티팩트에 의존할 수 있는 오류를 방지하여 빌드 안정성이 향상됩니다.
보다 정확한 의존관계 그래프를 분석하기 위해 Bazel은 파일 기반 타임스탬프가 아닌 콘텐츠 다이제스트를 사용합니다.파일 타임스탬프는 일반적으로 Make 또는 Apache Ant와 같은 도구의 변경을 감지하는 데 사용됩니다.빌드가 여러 호스트에 분산되어 있는 경우 클럭 [9]동기화 문제로 인해 타임스탬프가 문제가 될 수 있습니다.또 다른 Bazel의 목표는 원격 클라우드 인프라에서 분산 및 병렬 구축을 지원하는 것입니다.또한 개별 개발자의 작업 [10]머신에 다운로드하는 것이 실용적이지 않을 수 있는 매우 큰 빌드 저장소까지 확장할 수 있도록 설계되었습니다.
Bazel은 개발자가 비트와 동일한 재현 가능한 빌드 출력을 만들 수 있도록 지원하는 도구를 제공합니다.Bazel이 구현한 규칙은 생성된 출력에 타임스탬프를 포함시켜 콘텐츠 다이제스트가 일치하도록 하는 것과 같은 일반적인 함정을 방지합니다.이를 통해 빌드 시스템은 중간 빌드 단계의 출력을 안정적으로 캐시(메모화)할 수 있습니다.또한 빌드를 재현할 수 있기 때문에 전용 빌드 서버 또는 분산 캐시를 사용하여 조직 내 팀 또는 부서 간에 중간 빌드 결과를 공유할 수 있습니다.따라서 Bazel은 빌드 의존도가 높은 대규모 조직 및 소프트웨어 프로젝트에 특히 적합합니다.결정론적 빌드와 의존관계 그래프 전체에서 빌드 입출력 아티팩트를 정밀하게 분석할 수 있는 기능은 빌드 단계를 병렬로 실행하는 데 도움이 됩니다.
스타락어
Bazel은 커스텀 Starlark 프로그래밍 언어로 확장 가능합니다.Starlark는 Python 프로그래밍 언어 구문의 하위 집합인 구문을 사용합니다.그러나 빌드 시스템 자체에 알려지지 않은 빌드 출력을 생성하거나 부작용을 일으킬 수 있는 확장을 피하기 위해 컬렉션을 변환하거나 파일 I/O에 액세스하는 기능 등 Python의 언어 기능을 많이 구현하지 않습니다.이러한 부작용으로 인해 빌드 종속성 그래프가 잘못 분석될 수 있습니다.
Bazel은 다국어 빌드 시스템으로 설계되었습니다.일반적으로 사용되는 많은 빌드 시스템은 특정 프로그래밍 언어를 선호하도록 설계되었습니다.이러한 시스템의 예로는 Java의 경우 Ant와 Maven, Clojure의 경우 Leiningen, Scala의 경우 sbt 등이 있습니다.다국어 프로젝트에서는 개별 빌드 시스템을 결합하여 위에서 설명한 빌드 속도와 정확성의 이점을 달성하는 것은 어렵고 문제가 될 수 있습니다.
Bazel은 또한 모래 상자 제작 실행도 제공합니다.이를 통해 모든 빌드 종속성이 올바르게 지정되고 빌드가 개발자의 작업 컴퓨터에 로컬로만 설치된 라이브러리에 종속되지 않도록 할 수 있습니다.이를 통해 빌드가 이동 가능한 상태로 유지되고 다른 (원격) 환경에서 실행될 수 있습니다.
Bazel과 가장 유사한 시스템은 Pants,[11] Buck, [12][13]Please입니다.Pants와 Buck은 모두 Bazel과 유사한 기술 디자인 목표를 목표로 하고 있으며 구글에서 내부적으로 사용되는 Blaze 빌드 시스템에서 영감을 얻었다.Blaze는 또한 Bazel의 전신이다.Bazel, Pants, Buck 및 Please는 각각 BUILD 파일 구문 분석기로 Starlark를 채택했습니다.효율적인 의존관계 그래프 분석과 자동화된 빌드 아티팩트 추적이라는 유사한 목표를 가지고 독립적으로 개발된 빌드 시스템이 tup과 [14]같은 빌드 시스템에 구현되었습니다.
샌드박스
Bazel을 다른 빌드 시스템과 차별화하는 주요 기능 중 하나는 컴파일 단계에 샌드박스를 사용하는 것입니다.Bazel은 별도의 컴파일을 수행할 때 새 디렉토리를 생성하고 규칙에 대한 명시적 입력 종속성에 대한 심볼 링크로 채웁니다.C/C++와 같은 언어에서는 헤더 파일을 포함하기 위한 중요한 안전망이 제공됩니다.이것에 의해, 개발자는 컴파일시에 사용되는 파일을 인식할 수 있게 되어, 다른 include 디렉토리에서 같은 이름의 헤더 파일이 예기치 않게 포함되는 것을 방지할 수 있습니다.
이 샌드박스 접근 방식은 일반적인 빌드 도구의 문제로 이어지며, 결과적으로 다양한 아키텍처에서 코드를 올바르게 컴파일하기 위해 많은 해결 방법이 필요합니다.예를 들어, Mac/Darwin 아키텍처를 위해 별도의 컴파일러를 수행할 때, 컴파일러는 다음과 같은 명령으로 볼 수 있는 마하-O 바이너리의 SO 및 OSO 심볼에 입력 경로를 씁니다.nm -a mybinary grep SO이러한 경로는 디버깅 중에 기호를 찾는 데 필요합니다.결과적으로 Bazel의 빌드는 다음과 같은 플래그를 사용하여 샌드박스 구축에서 발생한 경로 관련 문제를 수정하기 위해 이후 컴파일된 객체를 수정해야 합니다.-fdebug-prefix-map그리고.-oso_prefix후자는 XCode 11.0에서 사용할 수 있게 되었습니다.링크 단계에서도 유사한 처리를 수행해야 하며 다음과 같은 명령을 사용하여 공유 객체 라이브러리의 rpath 값을 다시 써야 합니다.install_name_tool를 클릭합니다.[15]
로고
바젤의 최초 출시 이후 로고는 두 잎을 가진 바질 식물의 줄기로 스타일링된 녹색 문자 "b"였다.
2017년 7월 5일, Bazel Blog는 하트 모양을 만들기 위해 세 개의 녹색 빌딩 블록으로 구성된 새로운 [16]로고를 발표했습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Releases · bazelbuild/bazel". GitHub.
- ^ a b c Yegulalp, Serdar (Sep 11, 2015). "Google open-sources language-agnostic, scalable software tool". InfoWorld. Archived from the original on 25 October 2017. Retrieved 25 June 2016.
- ^ "FAQ - Bazel". bazel.build. Archived from the original on 2016-11-06.
- ^ Beyer, Betsy; Jones, Chris; Petoff, Jennifer; Murphy, Niall Richard (23 March 2016). Site Reliability Engineering: How Google Runs Production Systems. "O'Reilly Media, Inc.". p. 90. ISBN 9781491951187. Retrieved 25 June 2016.
- ^ a b c d Bolton, David (27 April 2015). "Bazel, Google's Open Source Build System - The New Stack". thenewstack.io. The New Stack. Archived from the original on 24 October 2017. Retrieved 25 June 2016.
- ^ a b Daws, Ryan (10 September 2015). "Google's software build tool Bazel heads into beta". www.developer-tech.com. Developer Tech. Archived from the original on 23 October 2017. Retrieved 25 June 2016.
- ^ "Starlark - Bazel". blog.bazel.build. Retrieved 2018-10-18.
- ^ a b "FAQ - Bazel". bazel.build. Retrieved 25 June 2016.
- ^ "What's Wrong With GNU make?".
- ^ York, Nathan (23 September 2011). "Build in the Cloud: Distributing Build Steps". google-engtools.blogspot.com.
- ^ "Pants: A fast, scalable build system".
- ^ "Buck: A high-performance build tool".
- ^ 자주 묻는 질문
- ^ Shal, Mike (2009). "Build System Rules and Algorithms" (PDF).
- ^ "tools/cpp/osx_cc_wrapper.sh". Github. 5 February 2022.
- ^ Giannini, Steren (5 July 2017). "A new logo and homepage for Bazel".
