빌드 이벤트 프로토콜

문제 신고 <ph type="x-smartling-placeholder"></ph> 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

빌드 이벤트 프로토콜 (BEP)를 사용하면 서드 파티 프로그램이 Bazel 호출에 대한 유용한 정보를 얻을 수 있습니다. 대상 예를 들어 BEP를 사용하여 IDE 관련 정보를 수집할 수 있습니다 대시보드를 통해 실행할 수 있습니다.

프로토콜은 프로토콜의 집합입니다. 버퍼 메시지를 그 위에 정의된 시맨틱을 기반으로 합니다 여기에는 빌드 및 테스트에 관한 정보가 포함되어 있습니다. 결과, 빌드 진행 상황, 빌드 구성 등을 확인할 수 있습니다. BEP는 프로그래매틱 방식으로 소비되며 Bazel의 과거의 것을 출력할 수 있습니다.

빌드 이벤트 프로토콜은 빌드에 대한 정보를 이벤트로 나타냅니다. 가 빌드 이벤트는 빌드 이벤트 식별자, 하위 이벤트 식별자 집합 및 페이로드가 포함됩니다

  • 빌드 이벤트 식별자: 빌드 이벤트의 종류에 따라 불투명 문자열 또는 구조화 정보 빌드 이벤트에 대한 자세한 정보를 확인할 수 있습니다 빌드 이벤트 식별자는 생성합니다

  • 하위 요소: 빌드 이벤트는 다음을 포함하여 다른 빌드 이벤트를 알릴 수 있습니다. 하위 요소에서 빌드 이벤트 식별자를 필드입니다. 예를 들어 PatternExpanded 빌드 이벤트는 확장하는 타겟을 알려줍니다. 어릴 때처럼요. 프로토콜은 첫 번째 이벤트를 제외한 모든 이벤트가 이전 이벤트에서 발표합니다.

  • 페이로드: 페이로드에는 빌드 이벤트에 관한 구조화된 정보가 포함됩니다. 해당 이벤트에 관련된 프로토콜 버퍼 메시지로 인코딩됩니다. Note that the 페이로드는 예상 유형이 아닐 수 있지만 Aborted 메시지일 수 있습니다. 빌드가 조기에 중단된 경우.

이벤트 그래프 빌드

모든 빌드 이벤트는 상위 요소와 하위 요소를 통한 방향성 비순환 그래프를 형성함 관계될 수 있습니다 초기 빌드 이벤트를 제외한 모든 빌드 이벤트에는 추가할 수 있습니다. 하위 이벤트의 모든 상위 이벤트가 게시되어야 합니다. 빌드 완료 시 (성공 또는 실패) 공지된 모든 이벤트가 게시됩니다. Bazel 비정상 종료 또는 실패 시 네트워크 전송을 지원하지 않는 경우 발표된 일부 빌드 이벤트가 게시되지 않을 수 있습니다.

이벤트 그래프의 구조는 명령어의 수명 주기를 반영합니다. 모든 BEP마다 특성의 형태는 다음과 같습니다.

  1. 루트 이벤트는 항상 BuildStarted입니다. 이벤트를 처리합니다. 다른 모든 이벤트는 하위 이벤트입니다.
  2. BuildStarted 이벤트의 바로 하위 요소에는 명령어와 함께 사용하면 됩니다
  3. 명령어로 생성된 데이터가 포함된 이벤트(예: 빌드 및 테스트 파일) BuildFinished 이벤트를 처리합니다.
  4. BuildFinished 이벤트를 팔로우할 수도 있습니다. 빌드에 대한 요약 정보가 포함된 이벤트 (예: 측정항목 프로파일링 데이터)를 가져올 수 있습니다

빌드 이벤트 프로토콜 사용

바이너리 형식으로 사용

BEP를 바이너리 형식으로 사용하려면 다음 단계를 따르세요.

  1. Bazel이 옵션 --build_event_binary_file=/path/to/file. 파일에는 각 메시지의 길이가 구분되는 직렬화된 프로토콜 버퍼 메시지. 각 메시지에는 가변 길이 정수로 인코딩된 길이가 접두사로 붙습니다. 이 형식은 프로토콜 버퍼 라이브러리의 parseDelimitedFrom(InputStream) 드림 메서드를 사용하여 축소하도록 요청합니다.

  2. 그런 다음 모델로부터 관련 정보를 추출하는 프로그램을 직렬화된 프로토콜 버퍼 메시지

텍스트 또는 JSON 형식 사용

다음 Bazel 명령줄 플래그는 사람이 읽을 수 있는 형식(예: 텍스트, JSON)

--build_event_text_file
--build_event_json_file

빌드 이벤트 서비스

빌드 이벤트 서비스 프로토콜은 빌드 이벤트 게시를 위한 일반적인 gRPC 서비스입니다. 빌드 이벤트 서비스 프로토콜은 BEP와는 별개이며 BEP 이벤트를 불투명 바이트로 처리합니다. Bazel은 빌드 이벤트 서비스 프로토콜의 gRPC 클라이언트 구현과 함께 빌드 이벤트 프로토콜 이벤트를 게시합니다. 엔드포인트를 지정하여 --bes_backend=HOST:PORT 플래그를 사용하여 이벤트를 처리합니다. 백엔드가 gRPC를 사용하는 경우 주소 앞에 적절한 스키마를 붙여야 합니다(일반 텍스트의 경우 grpc://). TLS가 사용 설정된 gRPC용 gRPC 및 grpcs://

빌드 이벤트 서비스 플래그

Bazel에는 다음과 같이 빌드 이벤트 서비스 프로토콜과 관련된 여러 플래그가 있습니다.

  • --bes_backend
  • --[no]bes_lifecycle_events
  • --bes_results_url
  • --bes_timeout
  • --bes_instance_name

이러한 각 플래그에 관한 설명은 다음을 참고하세요. 명령줄 참조.

인증 및 보안

Bazel의 빌드 이벤트 서비스 구현은 인증 및 TLS도 지원합니다. 이러한 설정은 아래 플래그를 사용하여 제어할 수 있습니다. 이러한 플래그는 Bazel의 원격 실행에도 사용됩니다. 이는 빌드가 이벤트 서비스와 원격 실행 엔드포인트는 보안 인프라를 제공합니다

  • --[no]google_default_credentials
  • --google_credentials
  • --google_auth_scopes
  • --tls_certificate
  • --[no]tls_enabled

이러한 각 플래그에 관한 설명은 다음을 참고하세요. 명령줄 참조.

빌드 이벤트 서비스 및 원격 캐싱

BEP에는 일반적으로 로그 파일 (test.log, test.xml, Bazel이 실행 중인 머신에 저장됩니다. 원격 BES 서버 일반적으로 이러한 파일은 다른 시스템에 있기 때문에 이러한 파일에 액세스할 수 없습니다. Bazel을 remote 캐싱을 사용합니다. Bazel이 모든 출력 파일을 원격 캐시에 업로드합니다 (파일 포함). 참조됨) BES 서버는 참조된 파일을 가져올 수 있습니다. 삭제합니다.

자세한 내용은 GitHub 문제 3689를 참고하세요. 확인하세요.