2012-11-26 36 views
13

Chúng tôi có rất nhiều dự án Java, được xây dựng bằng Jenkins. Chúng được triển khai cho máy chủ Nexus của riêng chúng tôi. Vấn đề là, chúng tôi cần cung cấp các thư viện này cho bên thứ ba, nhưng không có mã nguồn. Vì vậy, đối với từng dự án, trong Nexus ta có:Triển khai tạo tác Maven cho nhiều kho lưu trữ với các cài đặt khác nhau

  • chí kho cho nhà phát triển của chúng tôi (bao gồm triển khai mã nguồn)
  • Snapshots kho cho nhà phát triển của chúng tôi (mã nguồn bao gồm triển khai)
  • Nhà phát hành bên thứ ba kho lưu trữ (chỉ JAR + POM)
  • (và sẽ rất tốt nếu có): Ảnh chụp nhanh của bên thứ ba kho lưu trữ (chỉ JAR + POM) cho bên thứ ba hàng đêm xây dựng

Câu hỏi đặt ra là: cách này thường được xử lý trong thế giới Jenkins/Nexus? Tôi muốn có một công việc duy nhất trong Jenkins xử lý việc xây dựng CI và quá trình phát hành (triển khai artefact) "tự động". Hiện nay tôi đang sử dụng nhiều <distributionManagement> cấu hình trong "pom.xml chính gốc" của chúng tôi (bao gồm tất cả các dự án):

[...] 
<profiles> 
    <profile> 
     <id>default</id> 
     <distributionManagement> 
      <repository> 
       <id>releases</id> 
       <name>Release</name> 
       <url>http://path/to/nexus/content/repositories/releases/</url> 
      </repository> 
      <snapshotRepository> 
       <id>snapshots</id> 
       <name>Snapshot</name> 
       <url>http://path/to/nexus/content/repositories/snapshots/</url> 
       <uniqueVersion>false</uniqueVersion> 
      </snapshotRepository> 
     </distributionManagement> 
    </profile> 
    <profile> 
     <id>third-party</id> 
     <distributionManagement> 
      <repository> 
       <id>releases</id> 
       <name>Release</name> 
       <url>http://path/to/nexus/content/repositories/third-party/</url> 
      </repository> 
      <snapshotRepository> 
       <id>snapshots</id> 
       <name>Snapshot</name> 
       <url>http://path/to/nexus/content/repositories/third-party-snapshots/</url> 
       <uniqueVersion>false</uniqueVersion> 
      </snapshotRepository> 
     </distributionManagement> 
    </profile> 
</profiles> 

Từ các tài liệu Maven, nó có vẻ là không có cách nào sử dụng nhiều kho trong cùng xây dựng vòng đời, chưa kể đến thực tế là chúng ta cần/không cần nguồn dựa trên repo đích.

Tôi có thể thực hiện một mẹo khi tạo Công việc trong Jenkins, với "Mục tiêu và tùy chọn" của Maven: clean deploy -P third-party và sau đó thêm hành động Post-build - "Triển khai hiện vật vào kho lưu trữ Maven" với dữ liệu "mặc định" - trong trường hợp này, chỉ SNAPSHOTs sẽ chuyển tới cả repo và đồ tạo tác thông qua Jenkins Maven Release Plug-in chỉ đi vào một kho lưu trữ.

Bất kỳ ý tưởng thực tế nào tôi có thể làm điều này mà không làm quá tải hệ thống phân cấp công việc CI của chúng tôi như thế nào?

Cảm ơn trước!

+0

thể trùng lặp của [Nhiều triển khai trong maven] (http://stackoverflow.com/questions/635154/multiple-deployments- in-maven) –

+0

Vâng, tôi đã kiểm tra điều đó. Trên thực tế, plugin Wagon được đề xuất bên dưới có thể có cùng chức năng với 'merge-maven-repos', có thể sử dụng được cho bài đăng khác. Vì vậy, trường hợp xấu nhất chúng ta cần phải thực hiện một plugin tùy chỉnh, tôi đã chỉ tự hỏi nếu có một "cách phổ biến" của việc làm nó ngay cả với sự giúp đỡ của Jenkins. – Siaynoq

Trả lời

3

Bạn chỉ có thể xử lý tất cả điều này trong Nexus. Tạo một mục tiêu kho chứa một mẫu giống như mẫu được sử dụng trong ví dụ được định cấu hình sẵn "Tất cả trừ nguồn (Maven 2)" và thu hẹp mục tiêu xuống hơn nữa với một mẫu khác hạn chế nhóm, artifactid và thậm chí cả phiên bản.

Sau đó, tạo một đặc quyền sử dụng mục tiêu kho lưu trữ đó và gán nó cho người dùng hoặc vai trò bạn muốn có quyền truy cập tương ứng.

Không cần phải làm nhiều việc triển khai hoặc một số ví dụ ..

Xem http://books.sonatype.com/nexus-book/reference/repository-targets.html

+0

Cảm ơn! Sau khi hiểu được hệ thống phân cấp repo-target/privilege/role/user, đó là một miếng bánh thiết lập Nexus để hạn chế người dùng cụ thể truy cập vào các lọ nguồn. Tôi đã có một số nhầm lẫn về sự khác biệt của "xem" (-> có thể xem các thư mục) và "đọc" (-> có thể tải các tập tin), nhưng nếu không nó đã thực sự dễ dàng. – Siaynoq

+0

Liên kết bị hỏng. – Cleankod

+0

Đã sửa lỗi liên kết @CleanKod –

0

Bạn có thể sử dụng Maven Wagon Plugin và tải lên một bình đơn đến một vị trí ở xa trên giai đoạn triển khai.

+0

Cảm ơn ý tưởng. Điều này thực sự hữu ích, nhưng tôi không thể tìm thấy bất kỳ ví dụ làm việc nào về cơ bản "sao chép" (hoặc tải lên) một tập con của các tệp (trong trường hợp này là jar chính và pom.xml) đến một repo khác (và đến cùng một vị trí trong hệ thống phân cấp)). Bất kỳ gợi ý nào? – Siaynoq

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