Tìm hành vi không gây xúc phạm trong quy tắc WORKSPACE

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

Ở phần sau, máy chủ là máy mà Bazel chạy.

Khi sử dụng tính năng thực thi từ xa, các bước xây dựng và/hoặc kiểm thử thực tế sẽ không diễn ra trên máy chủ mà thay vào đó đượ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 các quy tắc không gian làm việc đang diễn ra trên máy chủ. Nếu quy tắc không gian làm việc của bạn truy cập thông tin về máy chủ để sử dụng trong quá trình thực thi, thì bản dựng của bạn có thể bị hỏng do không tương thích giữa các môi trường.

Trong quá trình thích ứng các quy tắc Bazel để thực thi từ xa, bạn cần tìm các quy tắc không gian làm việc như vậy và khắc phục chúng. 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ặp sự cố bằng cách sử dụng nhật ký không gian làm việc.

Tìm quy tắc không phải dấu phẩy

Quy tắc của Workspace 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 đủ tốt để cho phép quá trình xử lý tùy ý xảy ra trong quá trình này. Tất cả các lệnh liên quan đang diễn ra trên thiết bị và có thể là nguồn không chính xác tiềm ẩn. Thông thường, hành vi không phải là lệnh kín được giới thiệu thông qua repository_ctx cho phép tương tác với máy chủ.

Kể từ Bazel 0.18, bạn có thể nhận được nhật ký một số thao tác có thể không phải báo trước bằng cách thêm cờ --experimental_workspace_rules_log_file=[PATH] vào lệnh Bazel. Ở đây [PATH] là tên tệp mà theo đó nhật ký sẽ được tạo.

Những điều cần lưu ý:

  • nhật ký sẽ 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ì các bước này sẽ không xuất hiện trong nhật ký. Vì vậy, để có được kết quả đầy đủ, đừng quên chạy bazel clean --expunge trướ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 trong nhật ký nhiều lần.

  • Hiện tại, các quy tắc Workspace chỉ ghi lại các sự kiện Starlark.

Để tìm những gì đã được thực thi trong quá trình khởi chạy không gian làm việc:

  1. Chạy bazel clean --expunge. Lệnh này sẽ xóa bộ nhớ đệm cục bộ của bạn và mọi kho lưu trữ bộ nhớ đệm, đảm bảo rằng mọi quy trình khởi chạy sẽ được chạy lại.

  2. Thêm --experimental_workspace_rules_log_file=/tmp/workspacelog vào lệnh Bazel và chạy bản dựng.

    Thao tác này sẽ tạo ra một thông báo danh sách tệp nhị phân proto loại WorkspaceEvent

  3. 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.git
    cd bazel
    
  4. Trong 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:parser
    bazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog > /tmp/workspacelog.txt
    
  5. Kết quả có thể khá chi tiết và bao gồm kết quả từ các quy tắc Bazel được tạo sẵn.

    Để loại trừ một số 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:parser
    bazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog \
        --exclude_rule "//external:local_config_cc" \
        --exclude_rule "//external:dep" > /tmp/workspacelog.txt
    
  6. Mở /tmp/workspacelog.txt và kiểm tra các hoạt động không an toàn.

Nhật ký này bao gồm các thông báo WorkspaceEvent, trong đó nêu rõ một số thao tác có thể không phải là thông báo thực hiện trên repository_ctx.

Sau đây là những hành động được đánh dấu là có khả năng không có khả năng đề xuất:

  • 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 phần phụ thuộc này có thể giới thiệu 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 các bản dựng khép kín, hãy đảm bảo rằng bạn đã chỉ định sha256

  • file, template: bản thân đây không phải là giá trị ẩn danh, nhưng có thể là một 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ữ. Hãy đảm bảo rằng 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 lưu trữ.

  • os: bản thân đây không phải là giá trị ẩn danh, mà là một cách dễ dàng để có được các phần phụ thuộc trên môi trường máy chủ lưu trữ. Một bản dựng kín thường không gọi hàm này. Để đánh giá xem việc sử dụng của bạn có phải là khép kín hay không, xin 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 các worker. Nhìn chung, việc lấy môi trường cụ thể từ máy chủ lưu trữ không phải là một ý tưởng hay cho các bản dựng từ xa.

  • symlink: thông thường này an toàn nhưng hãy tìm kiếm dấu hiệu cảnh báo. Mọi đường liên kết tượng trưng ra bên ngoài kho lưu trữ hoặc đến một đường dẫn tuyệt đối sẽ gây ra sự cố cho trình chạy từ xa. Nếu đường 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ì đường liên kết đó cũng có thể gặp sự cố.

  • which: việc kiểm tra các chương trình cài đặt trên máy chủ thường gặp vấn đề vì các worker này có thể có cấu hình khác nhau.