Gọi Bazel từ tập lệnh

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Báo cáo sự cố Xem nguồn

Bạn có thể gọi Bazel từ các tập lệnh để thực hiện bản dựng, chạy kiểm thử hoặc truy vấn biểu đồ phần phụ thuộc. Bazel được thiết kế để cho phép 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 ý để tập lệnh của bạn trở nên mạnh mẽ hơn.

Chọn cơ sở dữ liệu đầu ra

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

Việc 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ố. Nếu bạn cần đặt đầu ra của bản dựng vào một vị trí cụ thể, thao tác này sẽ cho biết cơ sở dữ liệu đầu ra mà bạn cần sử dụng. Nếu bạn thực hiện lệnh gọi "chỉ có thể đọc" tới Bazel (chẳng hạn như bazel query), các yếu tố khoá sẽ quan trọng hơn. Cụ thể, nếu cần chạy đồng thời nhiều phiên bản tập lệnh, bạn cần cung cấp cho mỗi phiên bản 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 khoá mà các lệnh Bazel tương tác của người dùng sử dụng. Nếu người dùng đưa ra các lệnh chạy trong thời gian dài như bản dựng, tập lệnh của bạn sẽ phải đợi các lệnh đó 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ủ dài hạn để 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ủ không hoạt động sẽ tự tắt ngay.

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 được xem xét với các lỗi bên ngoài khiến Bazel không thực thi đúng cách. Việc thực thi Bazel có thể dẫn đến những mã thoát sau đây:

Thoát mã chung cho tất cả lệnh:

  • 0 - Thành công
  • 2 – Vấn đề dòng lệnh, cờ không hợp lệ hoặc cờ không hợp lệ hoặc tổ hợp lệnh hay biến môi trường không hợp lệ. Bạn phải sửa đổi dòng lệnh.
  • 8 – Bản dựng bị gián đoạn nhưng chúng tôi đã chấm dứt hoạt động này do lệnh gỡ bỏ có thứ tự.
  • 9 – Khóa máy chủ và --noblock_for_lock đã vượt qua.
  • 32 – Lỗi Môi trường bên ngoài không 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 việc sử dụng nội bộ của Google.

  • 35 – Dành riêng cho việc sử dụng nội bộ của Google.

  • 36 – Vấn đề môi trường tại địa phương, có thể là 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 việc sử dụng nội bộ của Google.

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

  • 45 – Lỗi khi xuất bản kết quả lên Dịch vụ sự kiện bản dựng.

  • 47 – Dành riêng cho việc sử dụng nội bộ của Google.

Mã trả về cho lệnh bazel build, bazel test:

  • 1 – Không tạo được bản dựng.
  • 3 – Xây dựng OK, nhưng một số thử nghiệm 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 bản kiểm thử nào mặc dù đã yêu cầu kiểm thử.

Đối với bazel run:

  • 1 – Không tạo được bản dựng.
  • Nếu bản dựng thành công nhưng quy trình phụ được thực thi sẽ trả về mã thoát khác 0, thì đó 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 phải 1 hoặc nhiều lỗi trong tệp tệp BUILD đầu vào và do đó kết quả của hoạt động không đáng tin cậy 100%. Điều này có thể là do tùy 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ế mã thoát lỗi 1 chung bằng một giá trị khác 0 khác có ý nghĩa cụ thể. Tuy nhiên, tất cả giá trị thoát khác 0 sẽ luôn tạo thành lỗi.

Đọc tệp .bazelrc

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

Nhật ký lệnh

Đầu ra Bazel cũng có trong một 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. Lưu ý rằng việc chạy bazel info sẽ ghi đè lên nội dung của tệp này vì sau đó 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ừ khi bạn thay đổi chế độ cài đặt của tuỳ chọn --output_base hoặc --output_user_root.

Phân tích cú pháp đầu ra

Đầu ra Bazel khá dễ phân tích cú pháp cho nhiều mục đích. Hai tuỳ chọn có thể hữu ích cho tập lệnh của bạn là --noshow_progress chặn các thông báo tiến trình và --show_result n kiểm soát việc có in thông báo "cập nhật hay không"; các thông báo này có thể được phân tích cú pháp để khám phá mục tiêu đã được tạo thành công và vị trí của các tệp đầu ra mà chúng đã tạo. Hãy nhớ chỉ định giá trị rất lớn là n nếu bạn dựa vào các thông báo này.

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

Xem phần Phân tích hiệu suất.