Xây dựng giao thức sự kiện

Báo cáo vấn đề Xem nguồn Hằng đêm · 7.3 · 7.2 · 7.1 · 7 · 6,5

Sự kiện Build Event Giao thức (BEP) cho phép các chương trình của bên thứ ba thu thập thông tin chi tiết về lệnh gọi Bazel. Để Ví dụ: bạn có thể sử dụng BEP để thu thập thông tin cho IDE hoặc trang tổng quan hiển thị kết quả bản dựng.

Giao thức là một tập hợp giao thức vào bộ đệm với một số ngữ nghĩa được xác định ở trên đó. Báo cáo này bao gồm thông tin về bản dựng và thử nghiệm kết quả, tiến trình xây dựng, cấu hình bản dựng và nhiều thông tin khác. BEP là được sử dụng theo cách có lập trình và giúp phân tích cú pháp dữ liệu của Bazel dòng lệnh sẽ xuất ra một quá khứ.

Giao thức sự kiện bản dựng biểu thị thông tin về một bản dựng dưới dạng sự kiện. Đáp sự kiện bản dựng là một thông báo vùng đệm giao thức bao gồm một giá trị nhận dạng sự kiện bản dựng, một tập hợp giá trị nhận dạng sự kiện con và một tải trọng.

  • Tạo mã nhận dạng sự kiện: Tuỳ thuộc vào loại sự kiện của bản dựng, mã đó có thể không rõ ràng chuỗi hoặc có cấu trúc thông tin để tìm hiểu thêm về sự kiện tạo. Giá trị nhận dạng sự kiện bản dựng là duy nhất trong một bản dựng.

  • Tệp con: Sự kiện bản dựng có thể thông báo các sự kiện khác của bản dựng, bằng cách đưa vào giá trị nhận dạng sự kiện xây dựng trong các phần tử con . Ví dụ: sự kiện bản dựng PatternExpanded sẽ thông báo các mục tiêu mà nó mở rộng khi còn nhỏ. Giao thức đảm bảo rằng tất cả các sự kiện, ngoại trừ sự kiện đầu tiên sự kiện, được thông báo bởi sự kiện trước đó.

  • Tải trọng: Tải trọng chứa thông tin có cấu trúc về một sự kiện bản dựng, được mã hoá dưới dạng thông báo vùng đệm giao thức dành riêng cho sự kiện đó. Lưu ý rằng tải trọng có thể không phải là loại dự kiến, nhưng có thể là một thông báo Aborted nếu bản dựng bị huỷ sớm.

Tạo biểu đồ sự kiện

Tất cả sự kiện bản dựng tạo thành một biểu đồ không chu trình có hướng thông qua phần tử mẹ và con mối quan hệ. Mỗi sự kiện tạo bản dựng ngoại trừ sự kiện tạo ban đầu đều có một hoặc sự kiện gốc khác. Xin lưu ý rằng không phải sự kiện gốc nào của sự kiện con cũng phải nhất thiết phải được đăng trước nó. Khi quá trình tạo bản dựng hoàn tất (thành công hoặc không thành công) tất cả sự kiện đã thông báo sẽ được đăng. Trong trường hợp xảy ra tai nạn Bazel hoặc không thành công truyền tải mạng, một số sự kiện bản dựng đã công bố có thể không bao giờ được đăng.

Cấu trúc của biểu đồ sự kiện phản ánh vòng đời của một lệnh. Mỗi BEP đồ thị có hình dạng đặc trưng sau:

  1. Sự kiện gốc luôn là BuildStarted sự kiện. Tất cả các sự kiện khác đều là thành phần con của sự kiện đó.
  2. Phần tử con trực tiếp của sự kiện BuildStarted chứa siêu dữ liệu về .
  3. Các sự kiện chứa dữ liệu do lệnh tạo ra, chẳng hạn như các tệp được tạo và kiểm thử kết quả, xuất hiện trước BuildFinished sự kiện.
  4. Sự kiện BuildFinished có thể được theo dõi theo các sự kiện có chứa thông tin tóm tắt về bản dựng (ví dụ: chỉ số hoặc lập hồ sơ dữ liệu).

Sử dụng giao thức sự kiện của bản dựng

Sử dụng ở định dạng nhị phân

Cách sử dụng BEP ở định dạng nhị phân:

  1. Yêu cầu Bazel chuyển đổi tuần tự thông báo vùng đệm giao thức thành một tệp bằng cách chỉ định phương thức tuỳ chọn --build_event_binary_file=/path/to/file. Tệp sẽ chứa thông báo trong vùng đệm giao thức tuần tự với mỗi thông báo được phân cách độ dài. Mỗi thư có tiền tố là độ dài được mã hoá dưới dạng số nguyên có độ dài biến đổi. Định dạng này có thể được đọc bằng cách sử dụng parseDelimitedFrom(InputStream) .

  2. Sau đó, viết chương trình trích xuất thông tin có liên quan từ thông báo vùng đệm giao thức tuần tự.

Sử dụng ở định dạng văn bản hoặc JSON

Các cờ dòng lệnh Bazel sau đây sẽ xuất BEP theo định dạng mà con người có thể đọc được, chẳng hạn như văn bản và JSON:

--build_event_text_file
--build_event_json_file

Xây dựng dịch vụ sự kiện

Sự kiện Build Event Dịch vụ Giao thức là một dịch vụ gRPC chung để phát hành các sự kiện bản dựng. Sự kiện Xây dựng Giao thức dịch vụ độc lập với BEP và coi các sự kiện BEP là các byte mờ. Bazel triển khai ứng dụng khách gRPC của giao thức Build Event Service (Dịch vụ sự kiện xây dựng) xuất bản các sự kiện Build Event Protocol (Giao thức tạo sự kiện). Người dùng có thể chỉ định điểm cuối để gửi các sự kiện sử dụng cờ --bes_backend=HOST:PORT. Nếu phần phụ trợ của bạn sử dụng gRPC, bạn phải thêm tiền tố địa chỉ bằng giao thức phù hợp: grpc:// cho văn bản thuần tuý gRPC và grpcs:// cho gRPC khi bật TLS.

Tạo cờ Dịch vụ sự kiện

Bazel có một số cờ liên quan đến giao thức Build Event Service (Dịch vụ sự kiện tạo), trong đó có:

  • --bes_backend
  • --[no]bes_best_effort
  • --[no]bes_lifecycle_events
  • --bes_results_url
  • --bes_timeout
  • --project_id

Để biết mô tả về từng cờ trong số này, hãy xem Tham chiếu dòng lệnh.

Xác thực và bảo mật

Hoạt động triển khai Dịch vụ sự kiện xây dựng của Bazel cũng hỗ trợ xác thực và TLS. Bạn có thể kiểm soát các chế độ cài đặt này bằng cách sử dụng các cờ bên dưới. Xin lưu ý rằng cờ cũng được dùng cho Hoạt động thực thi từ xa của Bazel. Điều này có nghĩa là phiên bản Xây dựng Dịch vụ sự kiện và Điểm cuối thực thi từ xa cần chia sẻ cùng một thiết bị xác thực và cơ sở hạ tầng TLS.

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

Để biết mô tả về từng cờ trong số này, hãy xem Tham chiếu dòng lệnh.

Xây dựng dịch vụ sự kiện và lưu vào bộ nhớ đệm từ xa

BEP thường chứa nhiều tham chiếu đến tệp nhật ký (test.log, test.xml, ) được lưu trữ trên máy nơi Bazel đang chạy. Máy chủ BES từ xa thường không thể truy cập vào những tệp này vì chúng đang ở trên các máy khác nhau. Cách để cách khắc phục vấn đề này là dùng Bazel bằng điều khiển từ xa lưu vào bộ nhớ đệm. Bazel sẽ tải tất cả các tệp đầu ra lên bộ nhớ đệm từ xa (bao gồm cả các tệp) tham chiếu trong BEP) và máy chủ BES sau đó có thể tìm nạp các tệp được tham chiếu khỏi bộ nhớ đệm.

Hãy xem Vấn đề GitHub 3689 để biết chi tiết hơn.