Tôi cần một số trợ giúp với triết lý và thiết kế một thiết lập tích hợp liên tục.
Thiết lập CI hiện tại của chúng tôi sử dụng buildbot. Khi tôi bắt đầu thiết kế nó, tôi đã kế thừa (tốt, không nghiêm túc, vì tôi đã tham gia vào thiết kế của nó một năm trước đó) một nhà xây dựng CI bespoke được thiết kế để chạy toàn bộ công trình cùng một lúc, qua đêm. Sau một thời gian, chúng tôi quyết định rằng điều này là không đủ, và bắt đầu khám phá các khung CI khác nhau, cuối cùng chọn buildbot. Một trong những mục tiêu của tôi khi chuyển sang buildbot (bên cạnh việc tận hưởng tất cả các tính năng bổ sung của tiếng rít) là khắc phục một số bất cập của người xây dựng hàng đêm bespoke của chúng tôi.
Hài hước cho tôi một lúc, và để tôi giải thích những gì tôi được thừa hưởng. Cơ sở mã cho công ty của tôi là gần 150 ứng dụng Windows c ++ duy nhất, mỗi ứng dụng có phụ thuộc vào một hoặc nhiều tá thư viện nội bộ (và nhiều thư viện của bên thứ 3). Một số các thư viện này phụ thuộc lẫn nhau và có các ứng dụng phụ thuộc (trong khi chúng không liên quan gì đến nhau) phải được xây dựng với cùng một bản dựng của thư viện đó. Một nửa trong số các ứng dụng và thư viện này được coi là "di sản" và không thể truy cập được và phải được xây dựng với một số cấu hình riêng biệt của trình biên dịch IBM (trong đó tôi đã viết các lớp con duy nhất Compile
) và nửa còn lại được xây dựng với studio trực quan.ShellCommand
s, vì không có hỗ trợ cho VSS).
Nhà xây dựng hàng đêm ban đầu của chúng tôi chỉ đơn giản là lấy nguồn cho mọi thứ và xây dựng công cụ theo một thứ tự nhất định. Không có cách nào để chỉ xây dựng một ứng dụng duy nhất, hoặc chọn một bản sửa đổi hoặc để nhóm các thứ. Nó sẽ ra mắt các máy ảo để xây dựng một số ứng dụng. Nó không mạnh lắm, nó không thể phân phối được. Nó không thể mở rộng khủng khiếp. Tôi muốn có thể khắc phục tất cả những hạn chế này trong buildbot.
Cách tôi đã làm điều này ban đầu là tạo các mục cho từng ứng dụng mà chúng tôi muốn xây dựng (tất cả 150 trong số chúng), sau đó tạo các trình lập lịch được kích hoạt có thể xây dựng các ứng dụng khác nhau thành các nhóm, và sau đó đưa các nhóm đó theo lịch trình xây dựng hàng đêm tổng thể. Chúng có thể chạy trên các nô lệ chuyên dụng (không cần thêm máy ảo) và nếu tôi muốn, tôi có thể chỉ cần thêm nô lệ mới. Bây giờ, nếu chúng ta muốn thực hiện xây dựng đầy đủ theo lịch trình, đó chỉ là một cú nhấp chuột, nhưng chúng ta cũng có thể xây dựng chỉ một ứng dụng mà chúng ta mong muốn.
Tuy nhiên, có bốn điểm yếu của phương pháp này. Một là mạng phụ thuộc phức tạp của cây nguồn của chúng tôi. Để đơn giản hóa việc bảo trì cấu hình, tất cả các trình tạo được tạo từ một từ điển lớn. Các phần phụ thuộc được truy xuất và xây dựng theo kiểu không mạnh mẽ khủng khiếp (cụ thể là, khóa các thứ nhất định trong từ điển mục tiêu xây dựng của tôi). Thứ hai là mỗi bản dựng có từ 15 đến 21 bước xây dựng, rất khó để duyệt và xem trong giao diện web và vì có khoảng 150 cột, sẽ tải mãi mãi (suy nghĩ từ 30 giây đến nhiều phút). Thứ ba, chúng tôi không còn tự động phát hiện các mục tiêu xây dựng (mặc dù, nhiều như một trong những đồng nghiệp của tôi đã nói với tôi về điều này, tôi không thấy những gì nó đưa chúng tôi ở nơi đầu tiên). Cuối cùng,
Bây giờ, chuyển sang phát triển mới, chúng tôi bắt đầu sử dụng g ++ và lật đổ (không chuyển kho lưu trữ cũ, làm phiền bạn - chỉ cho các công cụ mới). Ngoài ra, chúng tôi đang bắt đầu thực hiện nhiều thử nghiệm đơn vị hơn ("nhiều hơn" có thể đưa ra hình ảnh sai ... nó giống như bất kỳ ) và thử nghiệm tích hợp (sử dụng python). Tôi đang có một thời gian khó khăn để tìm ra làm thế nào để phù hợp với những điều này vào cấu hình hiện tại của tôi.
Vì vậy, tôi đã sai ở đâu về mặt triết học ở đây? Làm cách nào tôi có thể tiến lên tốt nhất (với buildbot - đó là mảnh ghép duy nhất mà tôi có giấy phép hoạt động) để cấu hình của tôi thực sự có thể duy trì được? Làm thế nào để tôi giải quyết một số điểm yếu của thiết kế? Điều gì thực sự hoạt động về mặt chiến lược CI cho các cơ sở mã lớn, phức tạp (có thể là quá mức)?
BIÊN TẬP:
Tôi nghĩ rằng tôi đã giải thích vấn đề của mình, nhưng rõ ràng tôi không đủ rõ ràng. Tôi không tìm kiếm đề xuất thay đổi nền tảng CI. Nó sẽ không xảy ra, và câu trả lời cho thấy rằng sẽ không được chấp nhận. Điều tôi muốn biết là cách người khác quản lý các cơ sở mã phức tạp bằng CI. Tôi có một tá các sản phẩm khác nhau bình phương , và tôi có sự phụ thuộc rải rác trong gió, và tất cả chúng đều khác nhau. Đây là những gì tôi muốn biết làm thế nào để đối phó với.