원래 블로그 게시물에서 발표된 대로 Bazel 4.0 이상 버전은 롤링 출시 버전과 장기 지원 (LTS) 출시 버전의 두 가지 출시 트랙을 지원합니다. 이 페이지에서는 Bazel의 출시 모델에 관한 최신 정보를 다룹니다.
지원 매트릭스
| LTS 출시 버전 | 지원 단계 | 최신 버전 | 지원 종료 |
|---|---|---|---|
| Bazel 9 | 순차적 | 롤링 출시 버전 페이지 확인 | 해당 사항 없음 |
| Bazel 8 | 활성 | 8.0.0 | 2027년 12월 |
| Bazel 7 | 유지보수 | 7.4.1 | 2026년 12월 |
| Bazel 6 | 유지보수 | 6.5.0 | 2025년 12월 |
| Bazel 5 | 유지보수 | 5.4.1 | 2025년 1월 |
| Bazel 4 | 지원 중단됨 | 4.2.4 | 2024년 1월 |
모든 Bazel LTS 출시 버전은 GitHub의 출시 페이지에서 확인할 수 있습니다.
출시 버전 관리
Bazel은 major.minor.patch 시맨틱 버전 관리 스키마를 사용합니다.
- 주 출시 버전 에는 이전 출시 버전과 하위 호환되지 않는 기능이 포함되어 있습니다. 각 Bazel 주 버전은 LTS 출시 버전입니다.
- A 부 출시 버전 에는 메인 브랜치에서 백포팅된 하위 호환되는 버그 수정 및 기능 이 포함되어 있습니다.
- 패치 출시 버전 에는 중요한 버그 수정이 포함되어 있습니다.
또한 출시 전 버전은 다음 주 버전 번호에 하이픈과 날짜 서픽스를 추가하여 표시됩니다.
예를 들어 각 유형의 새 출시 버전은 다음과 같은 버전 번호를 생성합니다.
- 주: 6.0.0
- 부: 6.1.0
- 패치: 6.1.2
- 출시 전: 7.0.0-pre.20230502.1
지원 단계
각 Bazel 주 버전에는 네 가지 지원 단계가 있습니다.
- 순차적: 이 주 버전은 아직 출시 전이며 Bazel팀은 HEAD에서 롤링 출시 버전을 게시합니다.
- 활성: 이 주 버전은 현재 활성 LTS 출시 버전입니다. Bazel 팀은 중요한 기능과 버그 수정을 부 출시 버전으로 백포팅합니다.
- 유지보수: 이 주 버전은 유지보수 모드의 이전 LTS 출시 버전입니다. Bazel팀은 보안 문제 및 OS 호환성 문제에 대한 중요한 버그 수정만 이 LTS 출시 버전으로 백포팅할 것을 약속합니다.
- 지원 중단됨: Bazel팀은 더 이상 이 주 버전을 지원하지 않으므로 모든 사용자는 최신 Bazel LTS 출시 버전으로 이전해야 합니다.
출시 주기
Bazel은 두 가지 출시 트랙에 대한 출시 버전을 정기적으로 게시합니다.
롤링 출시 버전
- 롤링 출시 버전은 Google Blaze 출시 버전과 조정되며 약 2주마다 HEAD에서 출시됩니다. 다음 Bazel LTS 출시 버전의 미리보기입니다.
- 롤링 출시 버전은 호환되지 않는 변경사항을 제공할 수 있습니다. 호환되지 않는 플래그는 주요 호환성이 손상되는 변경사항에 권장되며 호환되지 않는 변경사항을 롤아웃할 때는 하위 호환성 정책을 따라야 합니다.
LTS 출시 버전
- 주요 릴리스: 새 LTS 릴리스는 약 12개월 마다 HEAD에서 잘릴 것으로 예상됩니다. 새 LTS 출시 버전이 출시되면 즉시 활성 단계로 전환되고 이전 LTS 출시 버전은 유지보수 단계로 전환됩니다.
- 부 출시 버전: 활성 LTS 트랙의 새 부 버전은 2개월에 한 번 출시될 것으로 예상됩니다.
- 패치 출시 버전: 활성 및 유지보수 단계의 LTS 출시 버전에 대한 새 패치 버전은 중요한 버그 수정에 대해 요청 시 출시될 것으로 예상됩니다.
- Bazel LTS 출시 버전은 유지보수 단계에 2년 동안 있다가 지원 중단됨 단계로 전환됩니다.
계획된 출시 버전은 GitHub의 출시 문제 를 확인하세요.
출시 절차 및 정책
롤링 출시 버전의 경우 프로세스는 간단합니다. 약 2주마다 Google 내부 Blaze 출시 버전과 동일한 기준선에 맞춰 새 출시 버전이 생성됩니다. 빠른 출시 일정으로 인해 롤링 출시 버전으로 변경사항을 백포팅하지 않습니다.
LTS 출시 버전의 경우 아래 절차 및 정책이 적용됩니다.
- 출시 버전의 기준 커밋을 결정합니다.
- 새 주요 LTS 출시 버전의 경우 기준 커밋은 메인 브랜치의 HEAD입니다.
- 부 또는 패치 출시 버전의 경우 기준 커밋은 동일한 LTS 출시 버전의 현재 최신 버전의 HEAD입니다.
- 기준
커밋에서
release-<version>이름으로 출시 브랜치를 만듭니다. - PR을 통해 변경사항을 출시 브랜치로 백포팅합니다.
- 커뮤니티는 관련 GitHub 문제 또는 PR에
"
@bazel-io flag"로 답장하여 특정 커밋을 백포팅하도록 제안하여 잠재적인 출시 차단기로 표시할 수 있습니다. Bazel팀은 이를 분류하고 커밋을 백포팅할지 결정합니다. - 메인 브랜치의 하위 호환되는 커밋만 백포팅할 수 있으며 병합 충돌을 해결하기 위한 추가적인 사소한 변경사항은 허용됩니다.
- 커뮤니티는 관련 GitHub 문제 또는 PR에
"
Bazel 관리자를 위한 체리픽 요청 문제를 사용하여 변경사항을 백포팅합니다.
Bazel 관리자는 특정 커밋을 출시 브랜치로 체리픽하도록 요청할 수 있습니다. 이 프로세스는 GitHub에서 체리픽 요청을 만들어 시작됩니다. 방법은 여기를 참조하세요.
- 체리픽 요청을 엽니다.
- 요청 세부정보를 입력합니다.
- 제목: 요청에 대한 간결하고 설명이 포함된 제목을 제공합니다.
- 커밋 ID: 체리픽하려는 커밋의 ID를 입력합니다. 커밋이 여러 개 있는 경우 쉼표로 구분합니다.
- 카테고리: 요청의 카테고리를 지정합니다.
- 검토자: 검토자가 여러 명인 경우 GitHub ID's를 쉼표로 구분합니다.
- 마일스톤을 설정합니다.
- '마일스톤' 섹션을 찾아 설정을 클릭합니다.
- 적절한 X.Y.Z 출시 차단기를 선택합니다. 이 작업은 체리픽 봇이 'release-X.Y.Z' 브랜치에 대한 요청을 처리하도록 트리거합니다.
- 문제 제출
- 모든 세부정보를 입력하고 마일스톤을 설정한 후 문제를 제출합니다.
체리픽 봇은 요청을 처리하고 커밋이 체리픽할 수 있는 경우 알림을 보냅니다. 커밋이 체리픽할 수 있는 경우(즉, 커밋을 체리픽하는 동안 병합 충돌이 없음) 봇은 새 풀 요청을 만듭니다. 풀 요청이 Bazel팀의 구성원에게 승인되면 커밋이 체리픽되고 출시 브랜치로 병합됩니다. 완료된 체리픽 요청의 시각적 예는 이 예시 를 참고하세요.
출시 차단기를 식별하고 출시 브랜치에서 발견된 문제를 해결합니다.
- 출시 브랜치는 Bazel CI의 postsubmit 및 다운스트림 테스트 파이프라인에서 동일한 테스트 모음으로 테스트됩니다. Bazel팀은 출시 브랜치의 테스트 결과를 모니터링하고 발견된 회귀를 수정합니다.
알려진 모든 출시 차단기가 해결되면 출시 브랜치에서 새 출시 후보를 만듭니다.
- 출시 후보는 bazel-discuss에 발표되며 Bazel팀은 후보에 대한 커뮤니티 버그 신고를 모니터링합니다.
- 새 출시 차단기가 식별되면 이전 단계로 돌아가 모든 문제를 해결한 후 새 출시 후보를 만듭니다.
- 첫 번째 출시 후보가 생성된 후에는 출시 브랜치에 새 기능을 추가할 수 없습니다. 체리픽은 중요한 수정사항으로만 제한됩니다. 체리픽이 필요한 경우 요청자는 이 변경사항이 중요한 이유와 제공하는 이점을 설명하는 다음 질문에 답해야 합니다. 이 변경사항으로 인해 a 회귀가 발생할 가능성은 얼마나 되나요?
추가 출시 차단기가 발견되지 않으면 출시 후보를 공식 출시 버전으로 푸시합니다.
- 패치 출시 버전의 경우 마지막 출시 후보가 출시된 후 영업일 기준 최소 2일 후에 출시 버전을 푸시합니다.
- 주 및 부 출시 버전의 경우 마지막 출시 후보가 출시된 후 영업일 기준 2일 후에 출시 버전을 푸시하지만 첫 번째 출시 후보가 출시된 후 1주일 이전에 푸시하지는 않습니다.
- 출시 버전은 다음 날이 영업일 인 날에만 푸시됩니다.
- 출시 버전은 bazel-discuss에 발표되며 Bazel팀은 새 출시 버전에 대한 커뮤니티 버그 신고를 모니터링하고 해결합니다.
회귀 신고
사용자가 새 Bazel 출시 버전, 출시 후보 또는 HEAD의 Bazel에서 회귀를 발견하면 GitHub에 버그를 신고하세요. Bazelisk를 사용하여 문제의 원인이 되는 커밋을 이분하고 이 정보를 버그 신고에 포함할 수 있습니다.
예를 들어 Bazel 6.1.0으로 빌드가 성공하지만 6.2.0의 두 번째 출시 후보로 빌드가 실패하는 경우 다음을 통해 이분할 수 있습니다.
bazelisk --bisect=6.1.0..release-6.2.0rc2 build //foo:bar
문제를 재현하는 데 필요한 경우 BAZELISK_SHUTDOWN 또는 BAZELISK_CLEAN 환경 변수를 설정하여 해당하는 bazel 명령어를 실행하여 빌드 상태를 재설정할 수 있습니다. 자세한 내용은 Bazelisk
이분 기능에 관한 문서를 참고하세요.
이분 기능을 사용하려면 Bazelisk를 최신 버전으로 업그레이드해야 합니다.
규칙 호환성
규칙 작성자이고 여러 Bazel 버전과의 호환성을 유지하려면 규칙 호환성 페이지를 확인하세요.