2012-03-21 34 views
6

Tôi đang sử dụng Jenkins để xây dựng các dự án Java Maven và triển khai chúng vào một kho lưu trữ Nexus. Tôi cũng sử dụng Git, mặc dù tôi quen với Subversion hơn nên kiến ​​thức Git của tôi bị hạn chế.Gia tăng Phiên bản Dự án Maven với Jenkins/Git

Tôi muốn Jenkins/Maven để:

  1. Merge tính năng chi nhánh thành chi nhánh hội nhập
  2. Build sáp nhập mã, chạy đơn vị kiểm tra
  3. Nếu họ vượt qua, tăng Maven số phiên bản
  4. Đẩy mã được hợp nhất thành chi nhánh tích hợp của nguồn gốc
  5. Triển khai tạo tác cho kho lưu trữ Nexus

Tôi thu thập hợp nhất Git có thể đạt được như sau: http://twasink.net/2011/09/20/git-feature-branches-and-jenkins-or-how-i-learned-to-stop-worrying-about-broken-builds/

Tôi cũng đã đọc rất nhiều về số maven-release-plugin.

Tôi không chắc chắn chính xác cách đạt được các kết quả ở trên. Nếu tôi mã hóa chi tiết SCM vào mỗi POM của dự án thì không phải maven-release-plugin chỉ hoạt động trên mà kho lưu trữ thay vì địa chỉ của Jenkins?

Nếu tôi sử dụng giải pháp để Jenkins chuyển biến môi trường cho Maven để chỉ định số phiên bản, thì tôi mong đợi có các vấn đề về độ phân giải phiên bản cục bộ trong IDE của tôi.

+0

Xem [maven version plugin] (http://mojo.codehaus.org/versions-maven-plugin/) 'phiên bản mvn: sử dụng phiên bản tiếp theo hoặc' mvn: set -DnewVersion = xyz' –

+0

Xin chào , Tôi đã thử các phiên bản mvn: set -DnewVersion = xyz nhưng khi tạo tác được triển khai lên Nexus thì dường như có số phiên bản cũ, mặc dù tôi có thể thấy trong nhật ký biến được chuyển qua Maven. –

+0

Bạn nói đúng, bởi vì bạn đẩy các nguồn gốc (trước khi biên soạn). Bạn phải đẩy nguồn từ không gian làm việc jenkins ... –

Trả lời

8

OK, điều này khá khó thực hiện. Nhưng nó có thể thực hiện được. Hãy để tôi giải thích từng bước ý tưởng.

  1. Trước tiên, chúng ta cần hợp nhất hai chi nhánh lại với nhau. Điều này khá dễ thực hiện với plugin Jenkins Git, vì nó có tùy chọn feature built in: Hợp nhất trước khi xây dựng có sẵn trong phần Nâng cao trong cấu hình dự án của bạn.

  2. Vì vậy, chúng tôi đã hợp nhất mã giữa hai nhánh đó, chúng tôi có thể chuyển sang xây dựng dự án - kinh doanh như bình thường, dự án Jenkins theo phong cách Maven.

  3. Bây giờ, chúng tôi cần tăng phiên bản của dự án và các mô-đun của nó, cam kết nhánh đã hợp nhất và đẩy các tạo phẩm vào kho lưu trữ. Và ở đây chúng tôi có hai tùy chọn để đi với:

    1. Sử dụng maven-release-plugin cho công việc. Có, nó có thể, như không ai nói rằng bạn sẽ cần phải đặt các URL trong pom của bạn, vì nó có thể được cung cấp theo hai cách khác nhau. Plugin sẽ sử dụng plugin được cung cấp với công tắc dòng lệnh -DconnectionUrl=. Và nếu không có gì sẽ được cung cấp, nó sẽ kiểm tra file release.properties để lấy nó từ đó. Dự trữ cuối cùng là đi đến pom.xml ang nhận được ${project.scm.connection} biến. Vì vậy, bạn có thể dễ dàng sử dụng các plugin để làm tất cả các công việc bẩn mà không có bất kỳ phức tạp và giới thiệu rằng tài sản bằng cách sử dụng các kỹ thuật khác nhau được cung cấp bởi Jenkins.
    2. Bạn có thể sử dụng một sự kết hợp của maven-versions-plugin (specificaly phiên bản: setphiên bản: cam mục tiêu) với maven-scm-plugin để làm gắn thẻ và cam kết những thay đổi.

    Trong cả hai trường hợp, bạn có thể sử dụng bài viết Các bước với Run chỉ khi xây dựng thành công tùy chọn và gọi các mục tiêu Maven cấp cao nhất như bình thường. Đối với tất cả các cài đặt được đề cập ở trên hoặc được mô tả bởi plugin cụ thể, có một tùy chọn để cung cấp chúng dễ dàng trong trường văn bản. Để tải lên các đồ tạo tác của bạn lên repo Nexus, tôi sẽ sử dụng tính năng xây dựng của Jenkins để Triển khai các tạo phẩm đến kho lưu trữ Maven, khả dụng trong cấu hình dự án của bạn. Điều này sẽ yêu cầu bạn cung cấp một cấu hình kho lưu trữ trong định nghĩa POM, hoặc là thuộc tính.

Hy vọng rằng bao gồm tất cả các câu hỏi mà bạn có. Nếu bạn cần tôi cụ thể hơn trong bất kỳ phạm vi nào của câu trả lời, đừng ngần ngại hỏi.

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