Tình trạng dị thường

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

Trang này trình bày sự khó hiểu, 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 ẩn ý trong các 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 kết quả 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 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ủ 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 làm cho quy trình xây dựng độc lập vì không dựa vào các dịch vụ bên ngoài môi trường bản dựng.

Hai khía cạnh quan trọng của độ lệch là:

  • Tách biệt: Hệ thống xây dựng khép kín coi các công cụ là mã nguồn. Họ tải các bản sao của các công cụ xuống và quản lý bộ nhớ của mì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ủ và người dùng cục bộ, bao gồm cả phiên bản ngôn ngữ đã cài đặt.
  • Danh tính 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. Các kho lưu trữ mã, chẳng hạn như Git, sẽ xác định các nhóm đột biến mã bằng một mã băm duy nhất. Các hệ thống xây dựng khép kín sử 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 các 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à không cần chạy lại hành động đó trừ khi đầ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 biểu đồ về tất cả hành động để tính toán quá trình 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 đồ thao tác cũng như 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ể 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 khép kín rất 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 sự không khách quan

Nếu bạn đang 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 được hình dạng của các bản dựng hiện có. Một số nguồn không chính xác phổ biến trong bản dựng là:

  • Xử lý tuỳ ý trong các tệp .mk
  • Các thao tác hoặc công cụ giúp tạo tệp không xác định, thường liên quan đến mã nhận dạng 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 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 dành cho tính năng tự động định cấu hình quy tắc 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ộ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 tạo mục tiêu B có thể không thành công.

Khắc phục sự cố về bản dựng không phải xây dựng dấu phẩy động

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

  • Đả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, 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 từng bước bản dựng hai lần hoặc trên các hệ thống khác nhau, hãy so sánh các 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ạo lại đượ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 để đảm bảo rằng bạn có thể phát hiện mọi trường hợp môi trường máy khách bị rò rỉ trong các hành động.
  • Thực thi bản dựng trong một vùng chứa kết hợp không chứa gì ngoài cây nguồn đã kiểm tra và danh sách công cụ lưu trữ rõ ràng. Thông tin chi tiết về bản dựng và thông báo lỗi sẽ phát hiện các phần phụ thuộc hệ thống ngầm.
  • Khám phá và khắc phục sự cố về độ dày bằng cách sử dụng quy tắc thực thi từ xa.
  • 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 kết quả đầu ra.
  • Các quy tắc của Workspace cho phép nhà phát triển thêm 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 việc xử lý tùy ý xảy ra trong quá trình này. Bạn có thể xem nhật ký về một số hành động có thể không phải là thông báo 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 của bạn.

Hermeticity 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 các bản dựng khép kín với Bazel, hãy xem các bài nói chuyện sau của BazelCon: