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 đượ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 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 khỏ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 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 giúp quy trình xây dựng trở nên độc lập vì không phụ thuộc vào các dịch vụ bên ngoài môi trường xây dựng.
Hai khía cạnh quan trọng của tính kín là:
- Phân tách: Hệ thống xây dựng kín coi các 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.
- Danh tính nguồn: Hệ thống xây dựng 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ộ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à hành động đó không cần chạy lại trừ khi 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 đồ của tất cả các hành động để tính toán việc thực thi song song và hiệu quả. Hệ thống xây dựng 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ă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. Sau đây là một số nguyên nhân phổ biến gây ra tình trạng không kín trong bản dựng:
- 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. Đ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 nguồn chỉnh 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 kín
Bắt đầu với việc 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 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, 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 xử lý tuỳ ý trong quá trình. Bạn có thể nhận được nhật ký về một số hành động có thể không kín trong các quy tắc của 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.
Hermeticity cùng 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 kín với Bazel, hãy xem các bài nói chuyện sau tại 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 bằng tính 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 hữu dụng của tính năng lưu vào bộ nhớ đệm từ xa (IBM)
- Tạo ô tô tự lái bằng Bazel (BMW)
- Tạo xe tự lái bằng Bazel + Hỏi đáp (GM Cruise)