스크립트에서 Bazel 호출

문제 신고 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

스크립트에서 Bazel을 호출하여 빌드, 테스트 실행 또는 쿼리를 수행할 수 있습니다. 종속 항목 그래프를 확인할 수 있습니다 Bazel은 효과적인 스크립팅을 지원하도록 고안되었지만 이 섹션에는 스크립트를 더 자세히 작성하기 위해 유의해야 할 몇 가지 세부정보가 나와 있습니다. 강력해졌습니다

출력 베이스 선택

--output_base 옵션은 Bazel 프로세스가 다음 스크립트를 작성해야 하는 위치를 제어합니다. 빌드 출력과 내부에서 사용하는 다양한 작업 파일을 Bazel을 사용하는데, 이 중 하나는 현재 실행 중인 API의 여러 Bazel 프로세스로 출력 기반을 만듭니다

스크립트에 맞는 출력 기본 디렉터리를 선택하는 것은 있습니다. 빌드 출력을 특정 위치에 배치해야 하는 경우 사용해야 하는 출력 기반을 나타냅니다. '읽기 전용'으로 설정하는 경우 통화 대상 Bazel (예: bazel query)을 사용하면 잠금 요소가 더 중요합니다. 포함 특히 스크립트의 여러 인스턴스를 동시에 실행해야 하는 경우 각각에 서로 다른 (또는 임의의) 출력 기반을 제공해야 합니다.

기본 출력 밑 값을 사용하면 동일한 Bazel 명령어에서 사용되는 잠금 설정을 제어할 수 있습니다. 사용자가 문제를 장기 실행 명령이 있는 경우 스크립트는 해야 합니다

서버 모드 관련 참고사항

기본적으로 Bazel은 장기 실행 서버 프로세스를 있습니다. 스크립트에서 Bazel을 실행할 때는 shutdown를 호출하는 것을 잊지 마세요. 서버에서 작업을 마치거나 --max_idle_secs=5를 지정하여 자동으로 종료됩니다

어떤 종료 코드가 표시되나요?

Bazel은 소스 코드로 인한 실패를 구분하려고 합니다. Bazel이 제대로 실행되지 못하도록 하는 외부 오류를 고려해야 합니다. Bazel 실행으로 인해 다음과 같은 종료 코드가 발생할 수 있습니다.

모든 명령어에 공통된 종료 코드:

  • 0 - 성공
  • 2 - 명령줄 문제, 잘못되거나 잘못된 플래그 또는 명령어 조합 잘못된 환경 변수입니다. 명령줄을 수정해야 합니다.
  • 8 - 빌드가 중단되었지만 정상적인 종료로 종료되었습니다.
  • 9 - 서버 잠금이 유지되고 --noblock_for_lock이 전달되었습니다.
  • 32 - 이 머신에 외부 환경 오류가 없습니다.

  • 33 - Bazel이 메모리가 부족하여 비정상 종료되었습니다. 명령줄을 수정해야 합니다.

  • 34 - Google 내부용으로 예약되어 있습니다.

  • 35 - Google 내부용으로 예약되어 있습니다.

  • 36 - 지역 환경 문제, 영구적인 것으로 의심됨

  • 37 - 처리되지 않은 예외 / 내부 Bazel 오류

  • 38 - Google 내부용으로 예약되어 있습니다.

  • 39 - Bazel에 필요한 blob이 원격 캐시에서 제거됩니다.

  • 41-44 - Google 내부용으로 예약되어 있습니다.

  • 45 - 결과를 빌드 이벤트 서비스에 게시하는 중에 오류가 발생했습니다.

  • 47 - Google 내부용으로 예약되어 있습니다.

명령어 bazel build, bazel test의 반환 코드:

  • 1 - 빌드하지 못했습니다.
  • 3 - 빌드는 괜찮지만 일부 테스트가 실패하거나 타임아웃되었습니다.
  • 4 - 빌드에 성공했지만 테스트가 실행되었음에도 테스트를 찾을 수 없습니다. 있습니다.

bazel run의 경우:

  • 1 - 빌드하지 못했습니다.
  • 빌드는 성공했지만 실행된 하위 프로세스가 0이 아닌 종료를 반환하는 경우 이 역시 명령어의 종료 코드가 됩니다.

bazel query의 경우:

  • 3 - 부분적으로 성공했지만 다음 기간 동안 쿼리에 1개 이상의 오류가 발생했습니다. 입력 BUILD 파일이 설정되어 작업 결과가 100%가 아님 제공합니다 명령줄의 --keep_going 옵션 때문일 수 있습니다.
  • 7 - 명령 실패.

향후 Bazel 버전에서 종료 코드를 추가하여 일반 오류를 대체할 수 있습니다. 특정 의미를 가진 0이 아닌 다른 값으로 코드 1를 종료합니다. 하지만 0이 아닌 모든 이탈 값은 항상 오류로 간주됩니다.

.bazelrc 파일 읽기

기본적으로 Bazel은 기본 파일에서 .bazelrc 파일을 읽습니다. 사용자의 홈 디렉터리로 이동해야 합니다. 이 속성이 선호는 스크립트에 대한 선택입니다. 스크립트를 완벽하게 로드해야 한다면 밀폐된 방식 (예: 릴리스 빌드를 실행하는 경우)에서 .bazelrc 파일을 업로드합니다.--bazelrc=/dev/null 인코더-디코더 아키텍처를 빌드를 실행하는 경우 기본 동작이 더 좋습니다.

명령어 로그

Bazel 출력은 명령어 로그 파일에서도 확인할 수 있으며 이 파일은 다음 명령어로 찾을 수 있습니다. 다음 명령어를 실행합니다.

bazel info command_log

명령어 로그 파일에는 최신 Bazel 명령을 실행합니다. bazel info를 실행하면 최신 Bazel 명령어가 되기 때문입니다. 그러나 명령어 로그 파일의 위치는 --output_base 또는 --output_user_root 옵션의 설정입니다.

출력 파싱

Bazel 출력은 다양한 용도로 매우 쉽게 파싱할 수 있습니다. 두 가지 옵션은 진행을 억제하는 --noshow_progress이 스크립트에 도움이 될 수 있습니다. 메시지를 보낼지 여부를 제어하는 --show_result n '최신 버전 빌드'가 아닌 메시지가 인쇄됩니다. 이러한 메시지는 빌드한 타겟 및 출력 위치 파악 할 수 있습니다. 의존해야 하는 경우 n을 매우 큰 값으로 지정해야 합니다. 확인할 수 있습니다.

프로파일링을 통한 성능 문제 해결

성능 프로파일링 섹션을 참고하세요.