Lượng tử kế

Báo cáo vấn đề Xem nguồn Nightly .

Trang này đề cập đến tính khép kín, lợi ích của việc sử dụng bản dựng khép kín và các chiến lược để xác định hành vi không khép kín trong các bản dựng của bạn.

Tổng quan

Khi cho cùng một mã nguồn đầu vào và cấu hình sản phẩm, hệ thống xây dựng khép kín luôn trả về cùng một đầu ra bằng cách tách biệt bản dựng với những thay đổi đối với hệ thống lưu trữ.

Để tách biệt bản dựng, các bản dựng khép kín không nhạy cảm với các thư viện và phần mềm khác được cài đặt trên máy chủ cục bộ hoặc máy chủ lưu trữ từ xa. Các biến này phụ thuộc vào các phiên bản cụ thể của công cụ xây dựng, chẳng hạn như trình biên dịch và phần phụ thuộc, chẳng hạn như thư viện. Điều này làm cho quy trình xây dựng hoạt động độc lập vì không phụ thuộc vào các dịch vụ bên ngoài môi trường tạo bản dựng.

Hai khía cạnh quan trọng của tính ẩn là:

  • Tách biệt: Các hệ thống xây dựng ẩn xem công cụ là mã nguồn. Họ tải bản sao của các công cụ xuống và quản lý bộ nhớ cũng như sử dụng bên trong các cây tệp được quản lý. Điều này tạo ra sự tách biệt giữa máy chủ và người dùng cục bộ, bao gồm cả các phiên bản đã cài đặt của ngôn ngữ.
  • Nhận dạng nguồn: Các hệ thống xây dựng kín cố gắng đảm bảo tính giống nhau của các dữ liệu đầu vào. Các kho lưu trữ mã (chẳng hạn như Git) xác định các tập hợp đột biến mã bằng một mã băm duy nhất. Các hệ thống xây dựng kín dùng hàm băm này để xác định các thay đổi đối với đầu vào của bản dựng.

Lợi ích

Lợi ích chính của bản dựng khép kín là:

  • Tốc độ: Đầu ra của một thao tác có thể được lưu vào bộ nhớ đệm và không cần chạy lại thao tác đó trừ phi dữ liệu đầu vào thay đổi.
  • Thực thi song song: Đối với đầu vào và đầu ra nhất định, hệ thống xây dựng có thể tạo một biểu đồ gồm tất cả các hành động để tính toán hiệu quả và thực thi song song. Hệ thống xây dựng tải các quy tắc và tính toán một biểu đồ hành động cũng như dữ liệu đầu vào bằng hàm băm để tra cứu trong bộ nhớ đệm.
  • Nhiều bản dựng: Bạn có thể tạo nhiều bản dựng khép kín trên cùng một máy, mỗi bản dựng sử dụng các công cụ và phiên bản khác nhau.
  • Khả năng tái tạo: Bản dựng Hermetic rất phù hợp để khắc phục sự cố vì bạn biết chính xác các điều kiện tạo ra bản dựng.

Xác định tính không giống nhau

Nếu bạn chuẩn bị chuyển sang Bazel, việc di chuyển sẽ dễ dàng hơn nếu bạn cải thiện trước khả năng ẩn giấu của các bản dựng hiện có. Một số nguồn phổ biến dẫn đến tính không bảo mật trong các bản dựng là:

  • Xử lý tuỳ ý trong tệp .mk
  • Các thao tác hoặc công cụ tạo tệp một cách không xác định, thường liên quan đến mã bản dựng hoặc dấu thời gian
  • Các tệp nhị phân hệ thống khác nhau giữa các máy chủ (chẳng hạn như tệp nhị phân /usr/bin, đường dẫn tuyệt đối, trình biên dịch C++ của hệ thống để tự động định cấu hình quy tắc C++ gốc)
  • Ghi vào cây nguồn trong quá trình tạo bản dựng. Điều này giúp ngăn việc sử dụng cùng một cây nguồn cho một mục tiêu khác. Bản dựng đầu tiên ghi vào cây nguồn, chỉnh sửa cây nguồn cho mục tiêu A. Vậy thì việc cố gắng tạo mục tiêu B có thể sẽ không thành công.

Khắc phục sự cố bản dựng không liền mạch

Bắt đầu bằng quá trình thực thi cục bộ, các vấn đề ảnh hưởng đến lượt truy cập bộ nhớ đệm cục bộ sẽ cho thấy các thao tác không khép kín.

  • Đảm bảo các bản dựng tuần tự rỗng: Nếu bạn chạy make và nhận được một bản dựng thành công, thì việc chạy lại bản dựng đó sẽ không tạo lại bất kỳ mục tiêu nào. Nếu bạn chạy mỗi bước tạo bản dựng 2 lần hoặc trên nhiều hệ thống, hãy so sánh hàm băm của nội dung tệp và nhận kết quả khác nhau, thì bản dựng đó không thể tái tạo được.
  • Chạy các bước để gỡ lỗi lượt truy cập bộ nhớ đệm cục bộ từ nhiều máy khách tiềm năng nhằm đảm bảo bạn phát hiện được mọi trường hợp môi trường máy khách bị rò rỉ vào các thao tác.
  • Thực thi một bản dựng trong vùng chứa Docker chỉ chứa cây nguồn đã kiểm tra và danh sách rõ ràng các công cụ lưu trữ. Sự cố bản dựng và thông báo lỗi sẽ nắm bắt được các phần phụ thuộc hệ thống ngầm ẩn.
  • Khám phá và khắc phục các vấn đề về độ trễ bằng cách sử dụng quy tắc thực thi từ xa.
  • Bật tính năng hộp cát nghiêm ngặt ở cấp độ mỗi hành động, vì các hành động trong một bản dựng có thể có trạng thái và ảnh hưởng đến bản dựng hoặc kết quả.
  • Các quy tắc của không gian làm việc cho phép các 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. Tuy nhiên, các quy tắc này đủ phong phú để cho phép thực hiện quy trình xử lý tuỳ ý trong quy trình. Bạn có thể tải nhật ký một số thao tác có thể không bị ngắt quãng trong các quy tắc không gian làm việc của Bazel bằng cách thêm cờ --experimental_workspace_rules_log_file=PATH vào lệnh Bazel.

Hermeticity cùng với Bazel

Để biết thêm thông tin về cách các dự án khác gặt hái thành công nhờ sử dụng bản dựng khép kín với Bazel, hãy xem các cuộc trò chuyện sau đây của BazelCon: