Bạn có thể gọi Bazel từ các tập lệnh để thực hiện một 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 viết kịch bản hiệu quả, nhưng phần này liệt kê một số chi tiết cần lưu ý để làm cho kịch bản của bạn mạnh mẽ hơn.
Chọn cơ sở đầu ra
Tuỳ chọn --output_base
kiểm soát vị trí mà quy trình Bazel sẽ ghi các đầu ra của một bản dựng, cũng như nhiều tệp đang hoạt động được Bazel sử dụng nội bộ, 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ởi 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 bản dựng ở một vị trí cụ thể, thì điều này sẽ quyết định cơ sở đầu ra mà bạn cần sử dụng. Nếu bạn đang thực hiện lệnh gọi "chỉ đọc" đến Bazel (chẳng hạn như bazel query
), thì các yếu tố khoá sẽ quan trọng hơn. Cụ thể, nếu cần chạy nhiều phiên bản của tập lệnh cùng một lúc, bạn sẽ 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ẽ tranh giành cùng một khoá do 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 (chẳng hạn như bản dựng), thì tập lệnh của bạn sẽ phải đợi các lệnh đó hoàn tất thì mới có thể tiếp tục.
Lưu ý về chế độ máy chủ
Theo mặc định, Bazel sử dụng một quy trình máy chủ chạy trong thời gian dài để 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 việc sử dụng máy chủ hoặc chỉ định --max_idle_secs=5
để các máy chủ ở trạng thái rảnh sẽ tự động 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 đang đượ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. Quá trình thực thi Bazel có thể dẫn đến các mã thoát sau:
Mã thoát thường gặp đối với tất cả các lệnh:
0
– Thành công2
– Vấn đề về dòng lệnh, cờ hoặc tổ hợp lệnh không hợp lệ hoặc không đúng, hoặc Biến môi trường không hợp lệ. Bạn phải sửa đổi dòng lệnh.8
– Quá trình tạo bị gián đoạn nhưng chúng tôi đã chấm dứt bằng cách tắt có trật tự.9
– Khoá máy chủ được giữ và--noblock_for_lock
đã được truyền.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 tại địa phương, nghi ngờ là vĩnh viễn.37
– Ngoại lệ chưa được xử lý / Lỗi nội bộ của Bazel.38
– Dành riêng cho mục đích sử dụng nội bộ của Google.41-44
– Dành riêng cho mục đích sử dụng nội bộ của Google.45
– Lỗi khi xuất bản kết quả cho Build Event Service.47
– Dành riêng cho mục đích sử dụng nội bộ của Google.
Mã trả về cho các lệnh bazel build
, bazel test
:
1
– Bản dựng không thành công.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
– Bản dựng thành công nhưng không tìm thấy kiểm thử nào mặc dù đã yêu cầu kiểm thử.
Đối với bazel run
:
1
– Bản dựng không thành công.- Nếu bản dựng thành công nhưng quy trình con đã thực thi 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 hợp tệp BUILD đầu vào và do đó, kết quả của thao tác không đáng tin cậy 100%. Điều này có thể là do một 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ế mã thoát lỗi chung 1
bằng một giá trị khác khác 0 có ý nghĩa cụ thể.
Tuy nhiên, mọi giá trị thoát khác 0 sẽ luôn tạo thành một lỗi.
Đọc tệp .bazelrc
Theo mặc định, Bazel sẽ đọc tệp .bazelrc
từ 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. Việc này có phù hợp hay không là tuỳ vào lựa chọn của tập lệnh; nếu tập lệnh của bạn cần hoàn toàn khép kín (chẳng hạn như khi thực hiện bản dựng 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 thực hiện một bản dựng bằng các chế độ cài đặt mà người dùng ưu tiên, thì hành vi mặc định sẽ phù hợp hơn.
Nhật ký lệnh
Đầu ra của 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 chế độ cài đặt của các lựa chọn --output_base
hoặc --output_user_root
.
Kết quả phân tích cú pháp
Đầu ra của Bazel khá dễ phân tích 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
(ngăn chặn thông báo tiến trình) và --show_result n
(kiểm soát việc in thông báo "bản dựng mới nhất" hay không); bạn có thể phân tích cú pháp các thông báo này để khám phá những 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 một giá trị rất lớn cho n nếu bạn dựa vào những 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
Hãy xem phần Phân tích hiệu suất.