Lượng tử kế

Trang này trình bày về độ cứng, lợi ích của việc sử dụng bản dựng 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 đượ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 với các 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 kín không nhạy cảm với thư viện và các phần mềm khác được cài đặt trên máy chủ cục bộ hoặc máy chủ 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à 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 phải độ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 bền vững là:

  • Tách biệt: Hệ thống xây dựng Hermetic coi các 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ớ, đồng thời 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ủ lưu trữ 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 Hermetic cố gắng đảm bảo tính giống nhau của dữ liệu đầu vào. Kho lưu trữ mã (chẳng hạn như Git) xác định các nhóm trường 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 Hermetic sử dụng hà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 thao tác có thể được lưu vào bộ nhớ đệm và bạn không cần chạy lại thao tác đó trừ phi đầu vào thay đổi.
  • Thực thi song song: Đối với dữ liệu đầu vào và đầu ra nhất định, hệ thống xây dựng có thể tạo biểu đồ của tất cả các hành động để tính toán quá trình thực thi song song một cách hiệu quả. Hệ thống xây dựng sẽ tải các quy tắc và tính toán 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 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 ẩn là lựa chọn phù hợp để khắc phục sự cố vì bạn biết các điều kiện chính xác tạo ra bản dựng.

Xác định tính không độ mạnh

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

  • Xử lý tuỳ ý trong các tệp .mk
  • Các thao tác 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
  • Các tệp nhị phân của hệ thống khác nhau trên 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 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, sửa 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ố với các bản dựng không có logic

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 vào bộ nhớ đệm cục bộ sẽ cho thấy các hành động không theo trạng thái ẩn.

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

Độ hùng vĩ với Bazel

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