2009-12-09 28 views
13

Như tiêu đề nói, tôi đang cố gắng để có được một công việc phát hành tự động làm việc trên Hudson. Đó là một dự án Maven, và tất cả các mã trong Git. Theo cách thủ công, tôi thực hiện việc phát hành trên máy tính cá nhân của mình như vậy:Không thể lấy bản phát hành tự động làm việc với Hudson + Git + Maven Release Plugin

git checkout master 
mvn -B release:prepare release:perform 

Điều này hoạt động hoàn hảo. Plugin phát hành Maven đúng cách đẩy thẻ phát hành vào kho lưu trữ gốc cũng như cam kết tiếp theo va chạm phiên bản cho SNAPSHOT tiếp theo.

Tuy nhiên, khi tôi chạy công việc Maven này thông qua Hudson (hoặc bằng cách tạo công việc "phát hành" của riêng tôi hoặc bằng cách sử dụng M2 Release Plugin), nó không hoạt động tốt. Thẻ phát hành được đẩy ra kho lưu trữ gốc và bản phát hành bị đẩy ra khỏi kho lưu trữ Nexus của chúng tôi, nhưng cam kết tiếp theo va chạm phiên bản cho SNAPSHOT tiếp theo không bị loại bỏ. Hơn nữa, nhánh "master" trong kho gốc không bị thay đổi gì cả. Tôi đã nhìn vào không gian làm việc của Hudson cho công việc, tuy nhiên, và phiên bản đã được cập nhật.

Sau khi xem kết quả từ công việc Hudson, có vẻ như plugin Git không thực sự kiểm tra "chính", mà đúng hơn là SHA1 id. Nghĩa là, nếu các "bậc thầy" điểm nhãn chi nhánh để thực hiện "f6af76f541f1a1719e9835cdb46a183095af6861", Hudson không

git checkout -f f6af76f541f1a1719e9835cdb46a183095af6861 

thay vì

git checkout -f master 

Kết quả là, những thay đổi mà việc phát hành plugin Maven đang thực hiện không trên bất kỳ nhánh nào (chắc chắn không phải trên "master") và những thay đổi này không làm cho nó trở thành kho gốc. Nó chạy trên đúng mã, nhưng lưu giữ sổ sách khôn ngoan, những thay đổi dường như bị lạc vì không có điểm chi nhánh nào cho chúng.

Có ai đã nhận được combo phát hành Hudson + Git + Maven để hoạt động đúng không? Có một số cấu hình bổ sung ở đâu đó mà tôi có thể đặt để thực hiện điều này không? Hay đây là một lỗi trong plugin Hudson Git?

Xin cảm ơn trước.

+0

Dường như cùng một vấn đề được đề cập trong [Nhà maillique] (http://jenkins.361315.n4.nabble.com/Maven-release-plugin-Git-td2317181.html), trong [Hudson maillist] (http://java.net/projects/hudson/lists/users/archive/2011-08/message/135), trong JIRA [HUDSON-5856] (http://issues.hudson-ci.org/browse/HUDSON -5856), trên [GitHub gist] (https://gist.github.com/1351153). Ngoài ra [giải thích về HEAD tách rời] (http://stackoverflow.com/a/5772882/267197) là tương đối. –

Trả lời

3

Sau khi tìm kiếm nhiều thứ hơn một chút, tôi đã thử đặt bản phát hành tự động của mình thành công việc độc lập (nghĩa là không sử dụng Plugin phát hành M2). Thay vì có công việc được thiết lập để "xây dựng một dự án maven2", tôi đã tạo nó thành công việc "Xây dựng một dự án phần mềm kiểu tự do". Điều đầu tiên nó làm là thực hiện một lệnh shell:

git checkout master 

Bước tiếp theo là một invocation Maven, cấu hình thusly:

-e -B release:prepare release:perform 

Đó lệnh shell đầu tiên là chìa khóa; bây giờ tôi đang thực sự trên một chi nhánh, tất cả những thay đổi mà plugin phát hành thực hiện được đẩy trở lại kho lưu trữ gốc.

Trong khi điều này về mặt kỹ thuật trả lời câu hỏi của riêng tôi, tôi vẫn tò mò về trải nghiệm của người khác với sự kết hợp này của trình cắm phát hành Hudson + Git + Maven.

Cảm ơn

+0

Đây là một trải nghiệm Git-Hudson gần đây: http://blog.javabien.net/2009/12/01/serverless-ci-with-git/ – VonC

+0

Tôi cũng gặp vấn đề này, nhưng tôi không nghĩ đây thực sự là một giải pháp - nó sẽ không hoạt động ngay khi bạn có nhiều hơn một nhánh đang hoạt động. Thêm vào đó, phải quay trở lại với một dự án dạng tự do không phải là lý tưởng. – cemerick

+0

Cảm ơn bạn vì điều này. Tôi đã dành hàng giờ cố gắng tìm ra cách để có được Hudson (v. 3.3.2) để làm một bản phát hành xây dựng trên nhánh chủ bằng cách sử dụng Plugin Hudson Maven3 (v. 3.0.5) không có kết quả. – sdoca

5

Đã chỉnh sửa để loại bỏ thông tin lỗi thời.

Xem this answer cho giải pháp hiện tại (không phải là hack).

+0

Bạn có chắc chắn điều này được sửa trong 0.8? Tôi đang thử nghiệm với điều này ngay bây giờ và tôi vẫn thấy loại điều này: [không gian làm việc] $ git checkout -f 2904dc ... Hudson đang kiểm tra SHA-1 thay vì tham chiếu, để HEAD tách ra . Điều này gây phiền toái cho tôi vì kịch bản xây dựng của tôi cần biết nhánh nào đang xây dựng và tham số 'branch to build' không được xuất trong biến môi trường, vì vậy không có cách nào để biết. – meowsqueak

0

@meowsqueak: Tôi đã gặp sự cố tương tự và đã vá plugin để thêm biến có tên "GIT_BRANCH" vào môi trường xây dựng. Nếu bạn muốn dùng thử, plugin đã sửa đổi có sẵn để tải xuống @github: http://github.com/jberkel/Hudson-GIT-plugin/downloads. Tôi cũng đã liên lạc với tác giả thượng lưu để có được nó sáp nhập vào đường chính. Tất nhiên điều này không giải quyết được vấn đề của HEAD tách rời, nhưng ít nhất kịch bản xây dựng của bạn biết bạn đang ở nhánh nào.

2

Nếu tôi hiểu chính xác, hành vi này là cố ý vì Nigel không tin rằng maven phải cam kết với SCM. Có một cách giải quyết tương đối không đau (mặc dù tốt hơn là không phải làm việc xung quanh bất kỳ thứ gì). Tôi sử dụng bước tắm Hudson M2 cắm và làm một pre-build bước:

git checkout master || git checkout -b master 

git reset --hard origin/master 

này thực thi sau khi git đã kiểm tra ra các sha-1 nhưng trước khi maven bắt đầu xây dựng. Làm theo cách này cho phép tôi thiết lập chính cho bất kỳ plugin git nào đã kiểm tra. Sau đó tôi sử dụng maven-release-plugin để thực hiện các bản phát hành và SCM thay đổi và triển khai hoạt động tốt.

+0

Nigel là ai? Tác giả plugin git cho Jenkins? –

0

Tôi biết đó là câu hỏi cũ nhưng vẫn là câu trả lời hay. Thực hiện những gì được đề xuất ở đây: https://blogs.adobe.com/jzitting/maven-release-builds-with-jenkins-and-git/ "Giải pháp là đặt tùy chọn" Thanh toán/hợp nhất thành nhánh địa phương (tùy chọn) "trong cài đặt Git nâng cao trên màn hình cấu hình xây dựng Jenkins." Tôi đặt ở đó "HEAD" và biết công việc phát hành.

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