Trang này đề cập đến tính ẩn giấu, lợi ích của việc sử dụng kiến trúc khép kín và để xác định hành vi không kín đáo trong các bản dựng của mình.
Tổng quan
Khi cho cùng một mã nguồn đầu vào và cấu hình sản phẩm, giá trị khép kín hệ thống xây dựng 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 vào 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ủ lưu trữ 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à 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 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. Chúng tải bản sao của các công cụ xuống và quản lý dung lượng lưu trữ của chúng cũng như sử dụng bên trong tệp được quản lý cây xanh. Đ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.
- Nhận dạng nguồn: Hệ thống xây dựng kín cố gắng đảm bảo tính giống nhau đầ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ột mã băm duy nhất. Các hệ thống xây dựng 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 bản dựng khép kín là:
- Tốc độ: Kết quả của một hành động có thể được lưu vào bộ nhớ đệm và không cần phải lưu hành động đó sẽ 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 nhất định, hệ thống xây dựng có thể xây dựng một đồ thị gồm tất cả các hành động để tính toán hiệu quả và song song thực thi chính sách. 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 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ể tạo nhiều bản dựng khép kín trên cùng một bản dựng 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 lập: Bản dựng Hermetic 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 đ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 các bản dựng hiện có của bạn tính ẩn trước. Một số nguồn phổ biến của tính không kín đáo 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 bao gồm dấu thời gian hoặc mã bản dựng
- 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
, tệp nhị phân tuyệt đối đường dẫn, 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. Thao tác này ngăn chặn cùng một nguồn không được sử dụng cho mục tiêu khác. Bản dựng đầu tiên ghi vào nguồn chỉnh sửa cây nguồn cho mục tiêu A. Sau đó, cố gắng tạo 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 liền mạch
Khi 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 chấm dứt.
- Đả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, 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ản dựng trên các hệ thống khác nhau, so sánh hàm băm của nội dung tệp và nhận được các kết quả khác nhau, bản dựng không thể tái tạo được. - Thực hiện các bước đến gỡ lỗi kết quả tìm kiếm trong bộ nhớ đệm cục bộ từ nhiều máy khách tiềm năng để đảm bảo rằng bạn bắt được trường hợp môi trường máy khách rò rỉ vào 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ụ lưu trữ. Tạo sự cố và 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 vấn đề về độ ẩn 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, bởi vì các hành động trong một bản dựng có thể có trạng thái và ảnh hưởng 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 tuỳ ý xử lý trong quá trình. Bạn có thể
nhận nhật ký về một số thao tác có thể không theo cách kín trong các quy tắc không gian làm việc của Bazel bằng cách
đang thêm cờ
--experimental_workspace_rules_log_file=PATH
thành lệnh Bazel của bạn.
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ờ áp dụng phương pháp khép kín cùng với Bazel, hãy xem các cuộc trò chuyện sau đây của BazelCon:
- Xây dựng hệ thống theo thời gian thực bằng Bazel (SpaceX)
- Thực thi từ xa Bazel và lưu vào bộ nhớ đệm từ xa (Uber và TwoSigma)
- Tạo bản dựng nhanh hơn nhờ khả năng thực thi từ xa và lưu vào bộ nhớ đệm
- Fusing Bazel: Các bản dựng gia tăng nhanh hơn
- Thực thi từ xa so với thực thi cục bộ
- Cải thiện khả năng sử dụng bộ nhớ đệm từ xa (IBM)
- Xây dựng xe tự lái cùng Bazel (BMW)
- Xây dựng xe tự lái với Bazel + Hỏi và đáp (GM Cruise)