2011-08-05 43 views
30

Chúng tôi đang sử dụng maven. Tôi muốn thiết lập cơ sở hạ tầng để các tạo phẩm được tạo tự động sẽ chuyển đến kho lưu trữ Nexus. Và sau đó họ có thể được sử dụng bởi các nhà phát triển.Cơ sở hạ tầng với maven, Jenkins, Nexus

tôi đã thiết lập Jenkins với 1 công việc cho dự án của chúng tôi. Và tôi thiết lập Nexus trên cùng một máy chủ.

Trên máy tính của nhà phát triển, tôi đã sao chép cài đặt maven mặc định thành C: \ Users {user} .m2 \ settings.xml thêm phần này. Tài liệu tham khảo:

Configuring Maven to Use a Single Nexus

Maven Settings Reference

<mirror> 
    <!--This sends everything else to /public --> 
    <id>nexus</id> 
    <mirrorOf>*</mirrorOf> 
    <url>http://myserver:8081/nexus/content/groups/public</url> 
</mirror> 

(Tôi chỉ cần làm theo Repository Management with Nexus book)

bước tiếp theo của tôi sẽ là gì? Nếu công việc của Jenkins có mvn install? Cách tạo kho lưu trữ Nexus cho các đồ tạo tác của công ty?

Trả lời

16

Để triển khai đồ tạo tác cho Nexus, bạn cần phải bao gồm distributionManagement section trong pom của mình. Nexus có các kho lưu trữ cụ thể đã được thiết lập cho cả ảnh chụp nhanh và bản phát hành. Bạn nên cung cấp đường dẫn chính xác cho mỗi người để maven sẽ triển khai ảnh chụp nhanh và phát hành các tạo phẩm cho các bản repos chính xác. Sau đó, bất kỳ lúc nào bạn triển khai các tạo tác - thường là với mvn deploy hoặc sử dụng maven release plugin, các tạo tác sẽ được triển khai ở đó. Theo mặc định, Nexus có quyền ghi xác thực, vì vậy, bạn cần phải đảm bảo thêm server section bằng thông tin đăng nhập chính xác vào tệp settings.xml của bất kỳ ai sẽ triển khai các tạo phẩm. Jenkins có thể được đối xử khá giống với bất kỳ người dùng nào khác. Nếu bạn có nó, hãy xây dựng deploy, sau đó mọi bản dựng sẽ triển khai cho Nexus. Ngoài ra còn có một hành động hậu xây dựng để triển khai các tạo phẩm trong trường hợp bạn muốn nó xảy ra sau này trong công việc Jenkins.

+0

Trong khi điều này sẽ làm việc, nó buộc dự án của bạn để biết vị trí của kho vật của bạn. Hãy xem [câu trả lời này] (http://stackoverflow.com/a/11952832/235179) để có Jenkins xử lý triển khai tạo tác độc quyền. –

12

cập nhật pom.xml

<distributionManagement> 
    ... 
    <repository> 
     <id>deploymentRepo</id> 
     <name>Internal Releases</name> 
     <url>http://nexusserver:8081/nexus/content/repositories/releases</url> 
    </repository> 
    ... 
    </distributionManagement> 

sau đó cho maven ~/.m2/settings.xml add (đây là sử dụng triển khai mặc định trong Nexus)

<server> 
    <id>deploymentRepo</id> 
    <username>deployment</username> 
    <password>deployment123</password> 
</server> 

sau đó mvn deploy

Sau đó, nó có thể sử dụng được triển khai artifact trong bất kỳ dự án, giống như các hiện vật tiêu chuẩn. Trong trường hợp này thêm vào pom.xml

<!-- company repositories --> 
    <repository> 
     <id>deploymentRepoReleases</id> 
     <name>Releases (Nexus)</name> 
     <url>http://nexusserver:8081/nexus/content/repositories/releases/</url> 
    </repository> 
    <repository> 
     <id>deploymentRepoSnapshots</id> 
     <name>Snapshots (Nexus)</name> 
     <url>http://nexusserver:8081/nexus/content/repositories/snapshots/</url> 
    </repository> 

UPDATE: Sau đó chúng tôi đi ra khỏi kho Snapshot và đã sử dụng maven-release-plugin rằng chỉ cần kho kiểu phát hành.

16

Tôi không cần phải thực hiện bất kỳ thay đổi pom.xml dự án của tôi. Thay vào đó, trong jenkins "Post-build Actions" tôi chọn "Deploy artifacts to Maven repository" rồi chọn "Advanced" và đặt URL Repository thành http://nexusserver:8081/nexus/content/repositories/releases và ID của Repository là deploymentRepo.

Trong ~/.m2/settings.xml trên máy Jenkins tôi thêm

<settings> 
    <servers> 
    <server> 
     <id>deploymentRepo</id> 
     <username>deployment</username> 
     <password>deployment123</password> 
    </server> 
    </servers> 
    ... 

</settings> 
+0

Cài đặt mặc định của Nexus cho kho lưu trữ phát hành là cho phép 1 phiên bản chỉ được triển khai một lần. Bạn chỉ có công việc thứ hai để phát hành (tức là triển khai cho Nexus)? –

+1

@PaulVerest Bạn có thể thêm một Bước Trước để Thực thi Shell và chạy phiên bản 'mvn: set -DnewVersion = 1. $ {BUILD_NUMBER}: commit', đặt tên cho phiên bản sau số bản dựng. Sau đó, khi hành động Post-build này xảy ra, nó sẽ triển khai nó như phiên bản đó. –

+0

@JoshJohnson Đây là câu trả lời của Steve Brown. Cá nhân tôi khuyên bạn nên sử dụng maven-release-plugin chứ không phải phiên bản-maven-plugin (phiên bản: thiết lập) –

1

Nếu đây là một câu hỏi Jenkins chứ không phải là một câu hỏi Maven, tôi khuyên bạn nên sử dụng inbuilt Jenkins "Triển khai Artifacts để kho Maven" Đăng xây dựng Hành động cho hầu hết các trường hợp.

Ưu điểm theo ý kiến ​​của tôi:

  • More di động (chúng tôi sử dụng các kho khác nhau cho các giai đoạn khác nhau của chu kỳ cuộc sống), và mỗi trường hợp Jenkins biết kho riêng của nó
  • More rõ ràng cho bất cứ ai đọc được công việc Jenkins
  • khác ở phù hợp với cách Jenkins làm việc
1

Tiếp theo lập luận mục tiêu maven cho maven-release-plugin có thể được sử dụng để vượt qua nexu s kho xác thực

-Dusername=<> -Dpassword=<> 

sử dụng với dự án Jenkins, maven dòng lệnh, cho mối quan hệ repo chứng thực

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