2012-05-10 33 views
12

Sẽ rất tuyệt nếu cộng đồng guru Maven có thể giúp tôi với nhiệm vụ sau.Hoàn toàn tự động quy trình phát hành với phiên bản + phiên bản bổ sung

Tôi muốn tự động hóa quá trình phát hành mô-đun Maven ở Hudson theo cách mà quá trình phát hành chạy ở chế độ hàng loạt (không cần bất cứ điều gì cần được hỏi từ bảng điều khiển). Hiện tại tôi sử dụng các bước phổ biến release:prepare (với <preparationGoals>versions:update-parent clean verify</preparationGoals> để cập nhật cấp độ gốc lên phiên bản mới nhất trước khi cam kết) + release:perform. Tuy nhiên tôi muốn Maven phải làm như sau:

Somewhen trong bước chuẩn bị:

  • Đối với tất cả phụ thuộc mà phù hợp với groupId của dòng mô-đun và phụ huynh, thay thế -SNAPSHOT với phiên bản phát hành (ví dụ versions:use-releases -Dincludes=???) .

Somewhen sau khi phát hành:

  • Đối với tất cả phụ thuộc mà phù hợp với groupId của dòng mô-đun và phụ huynh, thay thế phiên bản phát hành với phiên bản -SNAPSHOT (ví dụ versions:use-latest-snapshots ...).

Ví dụ:

<parent> 
    <groupId>org.mycompany.myproject</groupId> 
    <artifactId>myproject-parent</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 

<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>myproject-api</artifactId> 
    <version>1.1-SNAPSHOT</version>   
</dependency> 

trước khi module được gắn thẻ được chuyển thành:

<parent> 
    <groupId>org.mycompany.myproject</groupId> 
    <artifactId>myproject-parent</artifactId> 
    <version>1.0</version> 
</parent> 

<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>myproject-api</artifactId> 
    <version>1.1</version>   
</dependency> 

và sau khi phát hành được thành công được chuyển đổi thành:

<parent> 
    <groupId>org.mycompany.myproject</groupId> 
    <artifactId>myproject-parent</artifactId> 
    <version>1.1-SNAPSHOT</version> 
</parent> 

<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>myproject-api</artifactId> 
    <version>1.2-SNAPSHOT</version>   
</dependency> 

tôi cảm thấy như nó cần một hỗn hợp của

versions:use-releases scm:commit release:prepare release:perform versions:use-latest-snapshots scm:commit

nhưng tôi không chắc chắn cách tốt nhất để làm điều này là gì. Đặc biệt nó sẽ là tốt đẹp để có càng ít cam kết càng tốt: khó khăn là reparationGoals được chạy sau khi kiểm tra phiên bản -SNAPSHOT.

Dự án được mô tả không phải là dự án đa mô-đun theo nghĩa POM mẹ không đề cập đến trẻ em qua số <modules>. cấu trúc SCM như sau:

. 
| 
+-- myproject-parent 
| +-- pom.xml 
+-- myproject-api 
| +-- pom.xml 
+-- myproject-impl 
    +-- pom.xml 

Dependencies là: cha mẹ

myproject-api → myproject-parent 
myproject-impl → myproject-parent 
myproject-impl → myproject-api 

của dự án POM (myproject-parent) sẽ được phát hành hiếm và do đó sẽ được phát hành đầu tiên. Sau đó, myproject-api (nếu cần) và sau đó myproject-impl.

Trả lời

5

Vấn đề đơn giản mà bạn có là cha mẹ của bạn có một số phiên bản khác với con của bạn, đó là cách sai để xây dựng mô-đun mulit. Một bản xây dựng đa mô-đun được thiết kế để có một số mô-đun liên quan có cùng một quá trình phát hành để từ đó có cùng số phiên bản. Nếu bạn làm theo hướng dẫn đó, bạn không cần plugin phiên bản, bạn chỉ thực hiện việc phát hành thông qua bản phát hành: chuẩn bị và phát hành: thực hiện Đó là nó.

Cập nhật: Sau khi thảo luận thêm tôi sẽ đề nghị để thiết lập một bộ mới của công việc Hudson có chứa các phụ thuộc giữa các module (downstream/upstream DEPS.) Và làm một phát hành trên từng công việc hudson mà gây nên các tiếp theo trong chuỗi công việc và vân vân. Điều kiện tiên quyết này để có mô-đun riêng biệt và các khu vực riêng biệt trong việc kiểm soát phiên bản là tốt. Nếu không cuộc chiến này sẽ bị mất với Maven và làm phức tạp cuộc sống.

+3

Tôi không thể đồng ý với bạn. Chúng ta có cấu trúc module phẳng: đây là cách duy nhất để làm cho chúng tách biệt và độc lập ở Hudson (nếu không kiểm tra thất bại trong môđun con không thành công trong toàn bộ dự án xây dựng). Một số mô-đun (ví dụ: POM mẹ) hiếm khi được thay đổi: không cần phải giải phóng chúng. Những người khác (như "mô hình") sẽ được phát hành vài lần. Và tư vấn của bạn không hoạt động nếu tôi có sự phụ thuộc giữa hai dự án đa mô-đun. Ngay cả đối với việc xây dựng đa mô-đun, tôi cũng không có bằng chứng cho thấy 'phát hành: chuẩn bị' sẽ thay thế các phụ thuộc' -SNAPSHOT' bằng các phiên bản "phát hành trong tương lai". –

+0

Đối với lần đầu tiên tôi có thể nói nó là tốt nếu các bài kiểm tra thất bại toàn bộ xây dựng sẽ thất bại gây ra một cái gì đó là sai. Câu hỏi đặt ra là tại sao bạn lại muốn họ tách ra ở Hudson? Hoặc đây là một mô-đun đa xây dựng hoặc nó không phải là. Hơn nữa nếu bạn pom cha mẹ được thay đổi hiếm khi vì vậy nó âm thanh nó có thể là một mô-đun riêng biệt có chu kỳ phát hành riêng của nó và bạn cần phải phát hành nó gây ra nó được sử dụng như là một phụ thuộc/cha mẹ của người khác. Nếu bạn có phụ thuộc giữa các mô-đun, những gì sẽ làm việc hoàn hảo trong một mô-đun đa xây dựng. Tôi có thể khuyên bạn nên xem tại đây: https://github.com/khmarbaise/javaee làm ví dụ. – khmarbaise

+0

_Đối với người đầu tiên tôi có thể nói rằng nó là tốt nếu các bài kiểm tra thất bại toàn bộ xây dựng sẽ thất bại gây ra một cái gì đó là sai._ Nó không phải lúc nào cũng tiện dụng. Trong dự án của chúng tôi, các nhóm nhỏ các nhà phát triển làm việc trên mô-đun riêng của họ. Mỗi mô-đun có danh sách thông báo email riêng để gửi email khi xây dựng không thành công/khôi phục từ thất bại. Vì vậy, những người 'X' và' Y' chịu trách nhiệm về các mô-đun 'A' và' B'. –

Các vấn đề liên quan