2012-06-19 29 views
6

Công cụ:
Jenkins ver. 1.470
Maven 2
SubversionJenkins một phần Xây dựng/Modular Xây dựng trên Commit Hook

Môi trường

Giả sử xây dựng của tôi có một số dự án A-D. Biểu đồ phụ thuộc tồn tại như được hiển thị. Đó là để nói: B phụ thuộc vào các lớp trong A, C phụ thuộc vào các lớp trong B, D phụ thuộc vào các lớp trong A. Chúng ta tạo các jenkins xây dựng sao cho chúng gọi các bản xây dựng phụ thuộc vào chúng như một hành động hậu xây dựng.

Một
| -> B -> C
| -> D

Mỗi đêm, chúng tôi kích hoạt đầy đủ xây dựng trong Jenkins (A xây dựng, gây nên B (gây nên C), gây nên D). Điều này được thực hiện dễ dàng đủ bằng cách yêu cầu A xây dựng hàng đêm và các thác còn lại.

Vấn đề

Tuy nhiên, trên một cam kết, chúng tôi muốn xây dựng các dự án đã được cam kết một lần.

  • Trường hợp 1: Chúng tôi thăm dò ý kiến ​​các kho lưu trữ (hoặc sử dụng commit hooks, nó làm cho không có sự khác biệt) và thấy rằng có là một cam kết đến B, sau đó B sẽ xây dựng và C sẽ xây dựng. Thành công!

  • Trường hợp 2: Chúng tôi thăm dò ý kiến ​​các kho lưu trữ và thấy rằng B và C đã được cam kết trong một cam kết, sau đó Jenkins sẽ cố gắng xây dựng B (kích hoạt một xây dựng của C), và xây dựng C (một xây dựng thứ hai). Thất bại. Xem điều gì xảy ra? C được xây dựng hai lần, chiếm thời gian xây dựng quý giá. Giữ bản dựng nhanh!

Có ai biết một cách để chỉ kích hoạt các dự án cao nhất trong từng xây dựng đường ống dẫn đã cam kết?

Tôi cho rằng một giải pháp sẽ là một cái móc SVN phức tạp mà xác định dự án cao nhất trong mỗi đường ống ...

  • Tình huống 3: Cam kết B C và D trong một cam kết. Móc SVN tìm C phụ thuộc vào B. Móc gọi các liên kết cụ thể của dự án để bắt đầu xây dựng cho B và D.

Cạm bẫy: Móc treo SVN rất phức tạp. Phải bảo trì đường ống trong móc SVN.

Tôi cảm thấy đây là vấn đề mà người khác đã gặp phải. Có một plugin Jenkins giúp với điều này?

+0

Trong trường hợp 2, các dự án Jenkins C & B đang xem xét cùng một dự án svn? – thekbb

Trả lời

1

Sẽ là một ý tưởng để nói jenkins phải đợi với bản dựng cho đến khi bản dựng c phụ thuộc vào hoàn thành. Đây là một lá cờ trong cấu hình công việc để làm điều đó. Nhưng bạn phải làm điều này cho mỗi công việc. Btw ...đó cũng là một lá cờ khác yêu cầu jenkins phải đợi với bản build cho đến khi một công việc phụ thuộc hoàn thành.

0

Tôi cũng đang tìm giải pháp hiệu quả cho vấn đề này. Tôi đã nhìn thấy một số gợi ý, nhưng cho đến nay chúng tôi đã chỉ quản lý để tránh một trong những cạm bẫy bằng cách tuần tự hóa việc xây dựng bằng cách sử dụng các plugin Khóa & Latches. Nó không ngăn dự án xây dựng nhiều lần từ một lần đăng ký duy nhất, nhưng nó sẽ đảm bảo rằng dự án được xây dựng lại tuần tự sau khi dự án thượng nguồn hoàn thành.

Nó thực sự là một vấn đề phức tạp để giải quyết trong trường hợp chung, nhưng tôi đã nghĩ đến việc viết một plugin để giải quyết vấn đề này. Một giải pháp đơn giản là chỉ để kiểm tra xem một dự án thượng nguồn hiện có đang xây dựng không và loại bỏ chính bạn khỏi hàng đợi xây dựng nếu có. Vì công việc ngược dòng sẽ khởi động xây dựng của bạn khi hoàn thành, đây là một tùy chọn.

Tùy chọn tốt hơn sẽ là plugin tự động quản lý hàng đợi xây dựng dựa trên biểu đồ phụ thuộc của bạn. Điều này có thể phức tạp, bởi vì bạn cần đảm bảo rằng không xây dựng bắt đầu cho đến khi tất cả các phụ thuộc của nó được hoàn thành. Về cơ bản, điều này có nghĩa là mọi checkin sẽ khiến plugin tự động thêm tất cả các phần hạ lưu được xây dựng vào hàng đợi để nó có thể quản lý chúng. Có thể có một cách thông minh, dễ dàng hơn để thực hiện điều này xảy ra với các trình kích hoạt ngược dòng/hạ lưu hiện có, nhưng nó không rõ ràng đối với tôi chỉ là cách làm cho nó xảy ra. Có xây dựng các plugin đường ống đã được yêu cầu để xử lý tình trạng này, nhưng họ rõ ràng không làm gì để ngăn chặn điều kiện cuộc đua, nơi một xây dựng hạ lưu có thể được kích hoạt bởi checkin giống như một xây dựng thượng nguồn.