Sau đây, máy chủ lưu trữ là máy chạy Bazel.
Khi sử dụng tính năng thực thi từ xa, các bước kiểm thử và/hoặc bản dựng thực tế không diễn ra trên máy chủ lưu trữ mà được gửi đến hệ thống thực thi từ xa. Tuy nhiên, các bước liên quan đến việc giải quyết quy tắc không gian làm việc đang diễn ra trên máy chủ lưu trữ. Nếu quy tắc không gian làm việc truy cập vào thông tin về máy chủ lưu trữ để sử dụng trong quá trình thực thi, thì có thể bản dựng của bạn sẽ bị hỏng do không tương thích giữa các môi trường.
Trong quá trình điều chỉnh quy tắc Bazel để thực thi từ xa, bạn cần tìm và khắc phục các quy tắc không gian làm việc như vậy. Trang này mô tả cách tìm các quy tắc không gian làm việc có khả năng gây ra vấn đề bằng cách sử dụng nhật ký không gian làm việc.
Tìm quy tắc không khép kín
Quy tắc không gian làm việc cho phép nhà phát triển thêm các phần phụ thuộc vào
không gian làm việc bên ngoài, nhưng chúng đủ phong phú để cho phép quá trình xử lý tuỳ ý
diễn ra trong quá trình này. Tất cả các lệnh liên quan đều diễn ra cục bộ và có thể là a
nguồn gốc tiềm ẩn của tính không khép kín. Thông thường, hành vi không khép kín được
giới thiệu thông qua
repository_ctx, cho phép tương tác
với máy chủ lưu trữ.
Kể từ Bazel 0.18, bạn có thể nhận nhật ký về một số thao tác có khả năng không khép kín
bằng cách thêm cờ --experimental_workspace_rules_log_file=[PATH] vào
lệnh Bazel. Trong đó, [PATH] là tên tệp mà nhật ký sẽ được
tạo.
Những điều cần lưu ý:
nhật ký ghi lại các sự kiện khi chúng được thực thi. Nếu một số bước được lưu vào bộ nhớ đệm, thì chúng sẽ không xuất hiện trong nhật ký. Vì vậy, để nhận được kết quả đầy đủ, đừng quên chạy
bazel clean --expungetrước.Đôi khi, các hàm có thể được thực thi lại, trong trường hợp đó, các sự kiện liên quan sẽ xuất hiện nhiều lần trong nhật ký.
Quy tắc không gian làm việc hiện chỉ ghi lại các sự kiện Starlark.
Cách tìm những nội dung đã được thực thi trong quá trình khởi chạy không gian làm việc:
Chạy
bazel clean --expunge. Lệnh này sẽ xoá bộ nhớ đệm cục bộ và mọi kho lưu trữ được lưu vào bộ nhớ đệm, đảm bảo rằng tất cả quá trình khởi chạy sẽ được chạy lại.Thêm
--experimental_workspace_rules_log_file=/tmp/workspacelogvào lệnh Bazel rồi chạy bản dựng.Thao tác này tạo ra một tệp proto nhị phân liệt kê các thông báo thuộc loại WorkspaceEvent
Tải mã nguồn Bazel xuống và chuyển đến thư mục Bazel bằng cách sử dụng lệnh bên dưới. Bạn cần có mã nguồn để có thể phân tích cú pháp nhật ký không gian làm việc bằng trình phân tích cú pháp workspacelog.
git clone https://github.com/bazelbuild/bazel.gitcd bazelTrong kho lưu trữ mã nguồn Bazel, hãy chuyển đổi toàn bộ nhật ký không gian làm việc thành văn bản.
bazel build src/tools/workspacelog:parserbazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog > /tmp/workspacelog.txtKết quả có thể khá chi tiết và bao gồm kết quả từ các quy tắc Bazel tích hợp.
Để loại trừ các quy tắc cụ thể khỏi kết quả, hãy sử dụng tuỳ chọn
--exclude_rule. Ví dụ:bazel build src/tools/workspacelog:parserbazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog \ --exclude_rule "//external:local_config_cc" \ --exclude_rule "//external:dep" > /tmp/workspacelog.txtMở
/tmp/workspacelog.txtvà kiểm tra các thao tác không an toàn.
Nhật ký bao gồm các thông báo
WorkspaceEvent
nêu rõ một số thao tác có khả năng không khép kín được thực hiện trên
repository_ctx.
Các thao tác được đánh dấu là có khả năng không khép kín như sau:
execute: thực thi một lệnh tuỳ ý trên môi trường máy chủ lưu trữ. Kiểm tra xem các thao tác này có thể đưa ra bất kỳ phần phụ thuộc nào trên môi trường máy chủ lưu trữ hay không.download,download_and_extract: để đảm bảo bản dựng khép kín, hãy nhớ đảm bảo chỉ định sha256file,template: bản thân thao tác này không phải là không khép kín, nhưng có thể là cơ chế để đưa các phần phụ thuộc vào môi trường máy chủ lưu trữ vào kho lưu trữ. Đảm bảo bạn hiểu nguồn gốc của dữ liệu đầu vào và dữ liệu đó không phụ thuộc vào môi trường máy chủ lưu trữ.os: bản thân thao tác này không phải là không khép kín, nhưng là một cách dễ dàng để nhận các phần phụ thuộc vào môi trường máy chủ lưu trữ. Bản dựng khép kín thường sẽ không gọi thao tác này. Khi đánh giá xem việc sử dụng của bạn có khép kín hay không, hãy lưu ý rằng thao tác này đang chạy trên máy chủ lưu trữ chứ không phải trên trình thực thi. Việc lấy thông tin cụ thể về môi trường từ máy chủ lưu trữ thường không phải là ý tưởng hay cho các bản dựng từ xa.symlink: thao tác này thường an toàn, nhưng hãy tìm các dấu hiệu cảnh báo. Mọi liên kết tượng trưng đến bên ngoài kho lưu trữ hoặc đến một đường dẫn tuyệt đối đều sẽ gây ra vấn đề trên trình thực thi từ xa. Nếu liên kết tượng trưng được tạo dựa trên các thuộc tính của máy chủ lưu trữ thì có thể liên kết đó cũng sẽ gây ra vấn đề.which: việc kiểm tra các chương trình được cài đặt trên máy chủ lưu trữ thường gây ra vấn đề vì trình thực thi có thể có các cấu hình khác nhau.