Tôi đang gọi cho Bazel bằng các tập lệnh

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

Bạn có thể gọi Bazel từ các tập lệnh để tạo một bản dựng, chạy chương trình kiểm thử hoặc truy vấn biểu đồ phần phụ thuộc. Bazel được thiết kế để cho phép viết tập lệnh hiệu quả, nhưng phần này liệt kê một số chi tiết cần lưu ý để giúp tập lệnh của bạn hiệu quả hơn mạnh mẽ.

Chọn cơ sở đầu ra

Tuỳ chọn --output_base kiểm soát vị trí mà quy trình Bazel sẽ ghi đầu ra của một bản dựng, cũng như các tệp đang hoạt động khác nhau được các bên Bazel, một trong số đó là khoá bảo vệ chống lại sự đột biến đồng thời của cơ sở đầu ra bằng nhiều quy trình Bazel.

Chọn thư mục cơ sở đầu ra chính xác cho tập lệnh của bạn phụ thuộc vào một số yếu tố khác. Nếu bạn cần đặt các kết quả đầu ra của bản dựng ở một vị trí cụ thể, thao tác này sẽ chỉ ra cơ sở đầu ra mà bạn cần sử dụng. Nếu bạn đang ở chế độ "chỉ có thể đọc" cuộc gọi tới Bazel (chẳng hạn như bazel query), các yếu tố khoá sẽ quan trọng hơn. Trong cụ thể, nếu bạn cần chạy đồng thời nhiều phiên bản của tập lệnh, bạn sẽ cần cung cấp cho mỗi phần tử một cơ sở đầu ra khác nhau (hoặc ngẫu nhiên).

Nếu sử dụng giá trị cơ sở đầu ra mặc định, bạn sẽ cạnh tranh cho cùng một giá trị khoá được sử dụng bởi các lệnh Bazel tương tác của người dùng. Nếu người dùng đặt vấn đề các lệnh chạy trong thời gian dài như bản dựng, thì tập lệnh của bạn sẽ phải đợi các lệnh đó cần hoàn tất trước khi có thể tiếp tục.

Lưu ý về chế độ máy chủ

Theo mặc định, Bazel sử dụng quy trình máy chủ diễn ra trong thời gian dài làm tối ưu hoá. Khi chạy Bazel trong một tập lệnh, đừng quên gọi shutdown khi bạn hoàn tất với máy chủ hoặc chỉ định --max_idle_secs=5 để các máy chủ đang ở trạng thái rảnh sẽ tự tắt ngay lập tức.

Tôi sẽ nhận được mã thoát nào?

Bazel cố gắng phân biệt các lỗi do mã nguồn trong xem xét các lỗi bên ngoài khiến Bazel không thực thi đúng cách. Quá trình thực thi Bazel có thể dẫn đến các mã thoát sau:

Mã thoát chung cho tất cả các lệnh:

  • 0 – Thành công
  • 2 – Sự cố dòng lệnh, cờ hoặc tổ hợp lệnh không hợp lệ hoặc không hợp lệ, hoặc Biến môi trường xấu. Dòng lệnh của bạn phải được sửa đổi.
  • 8 – Phiên bản bị gián đoạn nhưng chúng tôi đã chấm dứt hoạt động do việc ngừng cung cấp có thứ tự.
  • 9 – Khoá máy chủ được giữ lại và --noblock_for_lock đã được thông qua.
  • 32 - Lỗi môi trường bên ngoài không có trên máy này.

  • 33 – Bazel hết bộ nhớ và gặp sự cố. Bạn cần sửa đổi dòng lệnh.

  • 34 – Dành riêng cho mục đích sử dụng nội bộ của Google.

  • 35 – Dành riêng cho mục đích sử dụng nội bộ của Google.

  • 36 – Vấn đề về môi trường cục bộ, có thể là vấn đề vĩnh viễn.

  • 37 – Ngoại lệ chưa được xử lý / Lỗi Bazel nội bộ.

  • 38 – Dành riêng cho mục đích sử dụng nội bộ của Google.

  • 39 – Blobs do Bazel yêu cầu sẽ bị loại khỏi Bộ nhớ đệm từ xa.

  • 41-44 – Dành riêng cho mục đích sử dụng nội bộ của Google.

  • 45 – Đã xảy ra lỗi khi xuất bản kết quả lên Dịch vụ sự kiện của bản dựng.

  • 47 – Dành riêng cho mục đích sử dụng nội bộ của Google.

Trả về mã cho các lệnh bazel build, bazel test:

  • 1 – Không tạo được.
  • 3 – Bản dựng OK, nhưng một số kiểm thử không thành công hoặc hết thời gian chờ.
  • 4 – Tạo bản dựng thành công nhưng không tìm thấy thử nghiệm nào mặc dù quá trình kiểm thử đã yêu cầu.

Đối với bazel run:

  • 1 – Không tạo được.
  • Nếu bản dựng thành công nhưng quy trình phụ được thực thi sẽ trả về một lượt thoát khác 0 thì nó cũng sẽ là mã thoát của lệnh.

Đối với bazel query:

  • 3 – Thành công một phần, nhưng truy vấn đã gặp 1 hoặc nhiều lỗi trong tập hợp tệp BUILD đầu vào và do đó kết quả của thao tác không phải là 100% đáng tin cậy. Điều này có thể là do tuỳ chọn --keep_going trên dòng lệnh.
  • 7 – Lỗi lệnh.

Các phiên bản Bazel trong tương lai có thể thêm mã thoát bổ sung, thay thế lỗi chung mã thoát 1 có một giá trị khác 0 có một ý nghĩa cụ thể. Tuy nhiên, tất cả giá trị thoát khác 0 sẽ luôn cấu thành lỗi.

Đọc tệp .bazelrc

Theo mặc định, Bazel đọc tệp .bazelrc từ cơ sở Workspace hoặc thư mục gốc của người dùng. Liệu đây có phải là mong muốn là lựa chọn cho kịch bản của bạn; nếu tập lệnh của bạn cần hoàn chỉnh khép kín (chẳng hạn như khi tạo bản phát hành), bạn nên tắt tính năng đọc .bazelrc bằng cách sử dụng tuỳ chọn --bazelrc=/dev/null. Nếu bạn muốn thực hiện một bản dựng bằng cách sử dụng các chế độ cài đặt ưu tiên của người dùng, thì hành vi mặc định sẽ tốt hơn.

Nhật ký lệnh

Kết quả Bazel cũng có trong tệp nhật ký lệnh mà bạn có thể tìm thấy bằng lệnh sau:

bazel info command_log

Tệp nhật ký lệnh chứa các luồng stdout và stderr xen kẽ của lệnh Bazel gần đây nhất. Xin lưu ý rằng việc chạy bazel info sẽ ghi đè nội dung của tệp này vì sau đó, tệp này sẽ trở thành lệnh Bazel gần đây nhất. Tuy nhiên, vị trí của tệp nhật ký lệnh sẽ không thay đổi trừ phi bạn thay đổi phần cài đặt cho các tuỳ chọn --output_base hoặc --output_user_root.

Phân tích cú pháp kết quả đầu ra

Bạn có thể dễ dàng phân tích cú pháp cho kết quả Bazel này cho nhiều mục đích. Hai lựa chọn có thể hữu ích cho tập lệnh của bạn là --noshow_progress, giúp chặn tiến trình tin nhắn và --show_result n, sẽ kiểm soát việc không phải là "phiên bản cập nhật" thư được in; Các thông báo này có thể được phân tích cú pháp để tìm hiểu xem những mục tiêu nào đã được xây dựng thành công và vị trí của đầu ra các tệp mà họ đã tạo. Hãy nhớ chỉ định một giá trị n rất lớn nếu bạn dựa vào các thư này.

Khắc phục sự cố về hiệu suất bằng cách phân tích

Xem mục Lập hồ sơ hiệu suất.