Trang này trình bày về tính kín, 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 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 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. Các công cụ này 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 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. Các ứng dụng này tải bản sao của các công cụ xuống, quản lý bộ nhớ và sử dụng bên trong 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.
- 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. Các 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
Sau đây là các lợi ích chính của bản dựng kín:
- 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 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 kín rất 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 trạng không kín
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 tính 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 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 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ủ lưu trữ (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) - Viết 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 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, 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 mỗi bước xây dựng hai lần hoặc 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 kết quả khác nhau, thì bản dựng sẽ không thể tái tạo. - 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 để đảm bảo bạn phát hiện mọi trường hợp rò rỉ môi trường máy khách vào các hành động.
- Thực thi bản dựng trong một vùng chứa docker chỉ chứa cây nguồn đã kiểm tra và danh sách rõ ràng các công cụ lưu trữ. Các lỗi xây 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 ẩn.
- Khám phá và khắc phục các vấn đề về tính kín bằng cách sử dụ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 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ả.
- 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 đủ phong phú để cho phép quá trình xử lý tuỳ ý diễn ra trong quy 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.
Tính 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 kín với Bazel, hãy xem các bài nói chuyện sau tại BazelCon:
- Tạo hệ thống theo thời gian thực bằng Bazel (SpaceX)
- Thực thi từ xa và lưu vào bộ nhớ đệm từ xa của Bazel (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
- Hợp nhất Bazel: Tạo 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 xe tự lái bằng Bazel (BMW)
- Tạo xe tự lái bằng Bazel + Hỏi đáp (GM Cruise)