본문으로 건너뛰기
로그인 둘러보기
개발·코딩·데이터베이스 · 윈도우즈 유틸

Bazelisk

0

Bazelisk는 Bazel 빌드 도구를 더 쉽게 사용할 수 있도록 돕는 런처입니다. Bazel 프로젝트에서 Go 언어로 만든 래퍼(wrapper)로 제공되며, 별도 설치 후 명령줄에서 bazelisk를 호출하면 Bazel을 실행해 빌드 작업을 위임합니다.

개발빌드

소개

Bazelisk는 Bazel 빌드 도구를 더 쉽게 사용할 수 있도록 돕는 런처입니다. Bazel 프로젝트에서 Go 언어로 만든 래퍼(wrapper)로 제공되며, 별도 설치 후 명령줄에서 bazelisk를 호출하면 Bazel을 실행해 빌드 작업을 위임합니다. Winget, Chocolatey, Scoop, Homebrew 등 다양한 패키지 관리자를 통해 설치할 수 있고, npm으로도 배포됩니다.

상세정보

Bazel 버전 자동 선택 및 다운로드

현재 작업 디렉터리와 환경 설정을 분석해 적절한 Bazel 버전을 자동으로 선택하고, 필요한 경우 공식 서버에서 다운로드하여 사용합니다.

명령줄 인자 투명 전달

Bazelisk는 Bazel을 실행한 뒤 모든 명령줄 인자를 실제 Bazel 바이너리에 그대로 전달합니다. 따라서 사용자는 Bazel을 직접 호출하는 것과 동일하게 bazelisk를 사용할 수 있습니다.

`.bazelversion` 파일 기반 버전 고정

저장소 내에 `.bazelversion` 파일을 두면 Bazelisk는 해당 버전을 사용해 빌드를 수행합니다. 저장소와 함께 Bazel 버전을 버전 관리할 수 있어, 일관된 빌드 환경을 유지하고 호환되지 않는 버전으로 인한 빌드 실패를 줄일 수 있습니다.

추가 명령 및 옵션

  • `–strict`: 해당 Bazel 버전에서 활성화할 수 있는 호환되지 않는 플래그(incompatible flags) 집합을 확장합니다.
  • `–migrate`: Bazel을 여러 차례 실행하여 호환성 문제를 식별하고, 각 플래그를 개별적으로 적용한 보고서를 출력합니다.
  • `–bisect`: 빌드 실패를 유발한 Bazel 버전을 이분 탐색(bisect)으로 찾습니다. `GOOD` 커밋과 `BAD` 커밋 사이를 탐색합니다.
  • `bazeliskVersion`: Bazelisk 자체 버전을 출력합니다.
  • `completion`: Bazel 명령의 셸 자동완성 스크립트를 생성합니다 (bash, fish 지원).

저장 위치 및 도구 통합

다운로드한 Bazel 바이너리는 사용자 캐시 디렉터리의 `bazelisk` 폴더에 저장됩니다. 또한 Bazelisk는 다운로드한 Bazel 바이너리가 포함된 디렉터리를 PATH 앞에 추가해, Bazel 타깃 내부에서 `bazel`이 호출될 때 동일한 Bazel 바이너리가 사용되도록 합니다.

설치 및 시작 방법

Windows에서는 Winget으로 설치할 수 있습니다. 설치 후에는 명령 프롬프트에서 bazelisk 명령을 실행하면 Bazel이 실행됩니다.

  • Windows (Winget): `winget install –id Bazel.Bazelisk –exact`
  • Windows (Chocolatey): `choco install bazelisk`
  • Windows (Scoop): `scoop install bazelisk`
  • macOS (Homebrew): `brew install bazelisk`
  • npm (프론트엔드 개발자용): `npm install -g @bazel/bazelisk`
  • Linux/macOS (mise): `mise use -g bazelisk@latest`
  • 직접 다운로드: GitHub Releases 페이지에서 바이너리를 내려받아 PATH에 추가

위 패키지 관리자 중 일부는 bazelisk를 `bazelisk`와 `bazel` 두 이름으로 PATH에 등록합니다. Linux에서는 GitHub Releases에서 바이너리를 내려받아 직접 PATH에 추가할 수도 있습니다.

Bazel 버전 결정 알고리즘

Bazelisk는 다음 순서로 사용할 Bazel 버전을 결정합니다.

  1. 환경 변수 `USE_BAZEL_VERSION`이 설정되어 있으면 그 값을 사용
  2. 워크스페이스 루트에 `.bazeliskrc` 파일이 있고 `USE_BAZEL_VERSION` 변수가 있으면 그 값을 사용
  3. 현재 디렉터리 또는 상위 디렉터리에 `.bazelversion` 파일이 있으면 그 파일의 값을 사용
  4. 환경 변수 `USE_BAZEL_FALLBACK_VERSION`이 설정되어 있으면 `error:`, `warn:`, `silent:` 접두사에 따라 동작
  5. 위 조건에 해당하지 않으면 GitHub에 릴리스된 최신 안정(LTS) Bazel 버전을 사용

`.bazeliskrc` 설정 파일

워크스페이스 루트 또는 사용자 홈 디렉터리의 `.bazeliskrc` 파일에 환경 변수를 영구적으로 설정할 수 있습니다. 우선순위는 환경 변수, 워크스페이스의 `.bazeliskrc`, 사용자 홈의 `.bazeliskrc` 순입니다. 설정 가능한 항목에는 `BAZELISK_BASE_URL`, `BAZELISK_GITHUB_TOKEN`, `USE_BAZEL_VERSION` 등이 포함됩니다.

활용 예시

  • 시스템에 bazel 바이너리를 `/usr/local/bin/bazel`로 등록해 두고 사용하면, Bazel 업그레이드를 별도로 신경 쓰지 않아도 됩니다.
  • 저장소에 Bazelisk를 포함시켜 `./bazelisk build //my:software` 형태로 빌드를 안내하면, Bazel 설치 여부와 무관하게 사용자가 프로젝트를 빌드할 수 있습니다.
  • 저장소에 `.bazelversion` 파일을 추가해 정확한 Bazel 버전을 고정하면, 팀원·CI 환경 모두에서 동일한 버전으로 빌드가 진행되어 호환성 문제로 인한 빌드 실패를 줄일 수 있습니다.
  • `–bisect` 옵션으로 빌드가 깨지기 시작한 Bazel 커밋을 찾거나, `–migrate` 옵션으로 호환되지 않는 플래그를 단계적으로 점검할 수 있습니다.

제한 및 확인 사항

  • Go 버전은 Python 버전보다 더 많은 기능을 지원하며, Python 버전은 현재 유지보수되지 않습니다. 다만 Python 버전은 어떤 플랫폼에서든 Python 인터프리터만 있으면 동작합니다.
  • `last_downstream_green`은 제거되었으며, 대신 `last_green`을 사용해야 합니다.
  • `.bazelversion` 파일에 commit hash를 지정한 경우, Bazel CI를 통과한 커밋의 Bazel 바이너리만 제공됩니다.
  • 저장소에 Bazel 바이너리를 직접 추가하는 기능은 향후 지원 예정입니다.

시스템 요구사항

Windows에서는 Winget을 사용해 설치할 수 있으며, 명령 프롬프트에서 bazelisk 명령을 실행하면 Bazel이 동작합니다. Go 버전은 Linux, macOS, Windows에서 네이티브로 동작하며, Go 환경에서 `go install github.com/bazelbuild/bazelisk@latest` 명령으로 설치할 수 있습니다. Python 버전은 Python 2.7 및 3.x의 표준 라이브러리만 사용하도록 작성되어 있습니다.