33

Tôi đang cố gắng thiết lập quy trình xây dựng của mình trong hudson.Chia sẻ các tạo tác xây dựng giữa các công việc ở Hudson

Công việc 1 sẽ là công việc xây dựng tích hợp liên tục siêu nhanh (hy vọng) sẽ được tạo thường xuyên.

Công việc 2, sẽ chịu trách nhiệm điều hành một bộ thử nghiệm toàn diện, vào khoảng thời gian thông thường hoặc được kích hoạt theo cách thủ công.

Công việc 3 sẽ chịu trách nhiệm chạy các công cụ phân tích trên cơ sở mã (giống như Công việc 2).

Tôi đã thử sử dụng tính năng "Tùy chọn dự án nâng cao> sử dụng không gian làm việc tùy chỉnh" để mã được biên dịch trong Công việc 1 có thể được sử dụng trong Công việc 2 và 3. Tuy nhiên, dường như tất cả các tạo phẩm xây dựng vẫn nằm trong không gian làm việc của Job 1. Tôi đang làm điều này đúng không? Có cách nào tốt hơn để làm điều này? Tôi đoán tôi đang tìm kiếm một cái gì đó tương tự như một thiết lập đường ống xây dựng ... để mọi thứ có thể được chia sẻ và các công việc thích hợp có thể được thực hiện trong các giai đoạn.

(Tôi cũng xem là sử dụng 'nhiệm vụ hàng loạt' ... nhưng nó có vẻ như những người không có thể được sắp xếp? Chỉ được kích hoạt bằng tay?)

Bất kỳ lời đề nghị được hoan nghênh. Cảm ơn!

+0

Cùng một vấn đề ở đây, nó thực sự ngớ ngẩn rằng đối với một hạ lưu FindBugs hạn tôi phải một trong hai sao chép các nguồn và các JAR giữa các dự án, hoặc (kể từ khi xây dựng được kích hoạt SCM) có một thanh toán riêng biệt cho các nguồn. – ShiDoiSi

Trả lời

1

Bạn đã xem wiki Hudson chưa? Cụ thể: Splitting a big job into smaller jobs

+0

Tôi đọc điều đó, nhưng từ nhận xét của wiki, có vẻ như rất nhiều người đang gặp vấn đề với nó. Công việc này có phù hợp với bạn không? –

0

Tôi đã gặp vấn đề tương tự và những gì tôi đã kết thúc là các dự án riêng biệt cho các tác vụ lâu dài. Bước đầu tiên trong các dự án này là sao chép tất cả các tệp từ vùng làm việc của Công việc 1 (tức là lần cuối cùng xây dựng) vào vùng làm việc của công việc 2/3/etc. Điều này thường làm việc trừ khi công việc 1 được xây dựng tại thời điểm Job 2/3 bắt đầu, vì nó sẽ có một không gian làm việc không đầy đủ. Bạn có thể làm việc xung quanh điều này bằng cách phát hiện "kết thúc xây dựng" trong công việc 1 với một tập tin sentinel, hoặc sử dụng các plugin ổ khóa Hudson (Tôi đã không cố gắng).

Bạn không để sử dụng không gian làm việc tùy chỉnh nếu bạn đưa ra các giả định về vị trí của các công việc khác liên quan đến% WORKSPACE%.

+0

đã hy vọng tránh điều đó, nhưng có vẻ như đó là cách để đi :) cho phát hiện "kết thúc xây dựng", bạn có cân nhắc một trong những điều sau không? 1) Xây dựng trình kích hoạt "Xây dựng sau khi các dự án khác được xây dựng" 2) Hành động sau xây dựng "Xây dựng các dự án khác" hoặc u sẽ gặp sự cố nếu job1 được gọi nhiều lần ... nó sẽ ảnh hưởng đến công việc 2/3? –

0

Tôi đang làm một việc như vậy ngay bây giờ. Tôi khuyên bạn nên tránh bất kỳ nỗ lực nào để chạy nhiều công việc trong cùng một không gian làm việc được chia sẻ. Tôi chỉ có vấn đề với điều đó.

Tôi đang sử dụng maven và loại dự án dạng tự do. Một bộ công việc chạy khi các tệp trong hệ thống kiểm soát phiên bản kích hoạt nó. Chúng tạo các tạo tác ảnh chụp cục bộ. Một bộ công việc thứ hai chạy hàng đêm và thiết lập môi trường thử nghiệm tích hợp rồi chạy thử nghiệm trên đó.

Nếu bạn không sử dụng maven; một tùy chọn nó để thiết lập một khu vực trên đĩa và có các bước cuối cùng trong công việc một bản sao các hiện vật đến vị trí đó. Các bước đầu tiên của công việc hai nên được di chuyển những tập tin trên. Chạy bất cứ điều gì bạn cần để chạy.

Đối với công việc ba, có findbugs/checkstyle/pmd và tất cả các plugin cho Hudson bây giờ. Tôi muốn khuyên bạn nên chỉ cần tạo một phiên bản của công việc 1 mà làm một thanh toán hàng đêm sạch sẽ và chạy những người trên cơ sở mã của bạn.

0

Hudson dường như không có kho lưu trữ tích hợp cho các tạo phẩm xây dựng. Giải pháp của chúng tôi là tạo ra một giải pháp.

Chúng tôi đang ở trong môi trường Windosw nên tôi đã tạo một chia sẻ có thể được truy cập bởi tất cả máy chủ Hudson (chúng tôi cung cấp cho các dịch vụ có liên quan một tài khoản chung vì tài khoản hệ thống không thể truy cập tài nguyên trên mạng).

Trong kịch bản xây dựng (ant) của chúng tôi, chúng tôi có nhiệm vụ sao chép tài nguyên xây dựng từ các công việc khác sang không gian làm việc cục bộ và công việc tạo các tạo phẩm sao chép chúng vào kho lưu trữ chung.

Trong các môi trường khác, bạn có thể xuất bản và tìm nạp qua FTP hoặc bất kỳ cơ chế nào khác để di chuyển tệp.

ví dụ đơn giản về xuất bản và nhận nhiệm vụ:

<!-- ==================== Publish ==================================== --> 
<target name="Publish" description="Publish files"> 
    <mkdir dir="${publish.dir}/lib" /> 
    <copy todir="${publish.dir}/lib" file="${project.jar}"/> 
</target> 

<!-- ==================== Get ==================================== --> 
<target name="getdependencies" description="Get necessary results from published directory"> 
    <copy todir="${support.dir}"> 
    <fileset dir="${publish.dir}/lib"> 
     <include name="*.jar"/> 
    </fileset> 
    </copy> 
</target> 
+1

Tôi đoán bạn có thể sử dụng một sản phẩm kho lưu trữ chuyên dụng như Nexus; thật dễ dàng để thiết lập và miễn phí. Mục tiêu "triển khai" của Maven sẽ tải các tạo phẩm xây dựng của bạn lên kho lưu trữ như vậy và tôi chắc chắn Ant có các tác vụ có thể thực hiện tương tự. –

+0

Nexus có vẻ như quá mức cần thiết, nhưng một số tính năng trông thú vị. Tôi sẽ nhìn xa hơn. Cảm ơn bạn đã cung cấp thông tin. –

2

Vâng, đó là trang wiki là không phải là rất hữu ích ở chỗ nó cố gắng để làm cho nó âm thanh rất thanh lịch. Sự thật là Hudson không hỗ trợ chuỗi công việc rất thanh lịch nhưng nếu bạn phải chuyển công việc từ công việc này sang công việc khác.

Tôi cũng đang làm phương pháp zip-up-and-copy-workspace để chuyển không gian làm việc từ công việc này sang công việc khác. Tôi có bản dựng nhanh, phân tích đầy đủ và sau đó là bản phân phối. Ở giữa, tôi sử dụng Ant để tạo dấu thời gian và "xây dựng tem" để đánh dấu số của công việc đã tạo số của công việc khác. Tính năng vân tay giúp theo dõi các tập tin, nhưng vì tôi sẽ không lưu trữ các khóa không gian làm việc, việc lấy dấu vân tay là vô dụng đối với người dùng vì chúng không thể thực sự nhìn thấy các vùng làm việc.

+0

Có lẽ "trang wiki" đó là đề cập đến câu trả lời của Michael Donohue (theo ngày tháng). – seanf

0

Tôi đồng ý rằng các tệp bản sao/hiện vật/không gian làm việc hiện tại giữa các công việc thủ công nhỏ hơn thanh lịch.

Ngoài ra, tôi thấy không gian lãng phí/thời gian để lưu trữ các tệp tgz/zip lớn. Trong trường hợp của chúng tôi, các tệp này rất lớn (1.5G) và mất nhiều thời gian để đóng gói/lưu trữ/vân tay/giải nén.

Vì vậy, tôi giải quyết với một biến thể nhẹ tối ưu hóa như nhau:

  • Job 1/2/3 bài kiểm tra/clone kho cùng một nguồn, nhưng
  • Gióp 1 chỉ gói file đó đang thực sự xây dựng hiện vật
    • với Git làm cho điều này dễ dàng và nhanh chóng bằng cách git ls-files -oz, không chắc chắn về SCM khác
  • sử dụng Sao chép Artifact plugin để chuyển f Iles
  • Điều này làm giảm các tập tin đến một kích thước 1/3 trong trường hợp của chúng tôi -> tăng tốc, ít không gian lãng phí