Lượng tử kế

Trang này trình bày về 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 bản dựng.

Tổng quan

Khi được cung cấp 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 khỏi các thay đổi đối với hệ thống máy chủ.

Để tách biệt bản dựng, 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 từ xa. Chúng 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à các phần phụ thuộc (chẳng hạn như thư viện). Điều này giúp quá trình xây dựng trở nên độc lập vì không dựa vào các dịch vụ bên ngoài môi trường xây dựng.

Tính khép kín có 2 khía cạnh quan trọng:

  • Tính độc lập: Hệ thống xây dựng khép kín coi các công cụ là mã nguồn. Hệ thống này tải các bản sao của công cụ xuống và quản lý bộ nhớ cũng như việc sử dụng các công cụ đó bên trong cây tệp được quản lý. Điều này tạo ra sự độc lập giữa máy chủ và người dùng cục bộ, bao gồm cả các phiên bản ngôn ngữ đã cài đặt.
  • Nhận dạng nguồn: Hệ thống xây dựng khép kín cố gắng đảm bảo tính đồng nhất của dữ liệu đầu vào. 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ã băm duy nhất. Hệ thống xây dựng khép kín sử dụng mã băm này để xác định các thay đổi đối với dữ liệu đầu vào của bản dựng.

Lợi ích

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

  • Tốc độ: Đầu ra của một hành động có thể được lưu vào bộ nhớ đệm và hành động đó không cần chạy lại trừ phi dữ liệu đầu vào thay đổi.
  • Thực thi song song: Đối với dữ liệu đầu vào và đầu ra đã cho, 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 việc thực thi hiệu quả và song song. Hệ thống xây dựng tải các quy tắc và tính toán biểu đồ hành động và dữ liệu đầu vào băm để tra cứu trong bộ nhớ đệm.
  • Nhiều bản dựng: Bạn có thể xây dựng 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 khép kín rất hữu ích cho việc 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 khép kín

Nếu bạn đang chuẩn bị chuyển sang Bazel, thì việc di chuyển sẽ dễ dàng hơn nếu bạn cải thiện tính khép kín của các bản dựng hiện có trước. Sau đây là một số nguồn phổ biến gây ra tính không khép kín trong bản dựng:

  • Xử lý tuỳ ý trong tệp .mk
  • Các hành động hoặc công cụ tạo tệp không xác định, thường liên quan đến mã bản dựng hoặc dấu thời gian
  • Tệp nhị phân hệ thống khác nhau trên các máy chủ (chẳng hạn như /usr/bin tệp nhị phân, đường dẫn tuyệt đối, trình biên dịch C++ 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 xây dựng. Điều này ngăn không cho sử dụng cùng một cây nguồn cho mục tiêu khác. Bản dựng đầu tiên ghi vào cây nguồn, cố định cây nguồn cho mục tiêu A. Sau đó, việc cố gắng xây dựng mục tiêu B có thể không thành công.

Khắc phục sự cố bản dựng không khép kín

Bắt đầu bằng việc 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ẽ tiết lộ các hành động không khép kín.

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

Tính khép kín với Bazel

Để biết thêm thông tin về cách các dự án khác đã thành công khi sử dụng bản dựng khép kín với Bazel, hãy xem các bài nói chuyện tại BazelCon sau: