Lỗi khi triển khai cấu phần phần mềm trong Nexus


102

Tôi gặp lỗi khi triển khai một cấu phần phần mềm trong kho lưu trữ của riêng tôi trong máy chủ Nexus: "Không triển khai được phần mềm: Không thể chuyển phần mềm" "Không chuyển được tệp http: /// my_artifact. Mã trả lại là: 400"

Tôi có Nexus đang chạy với một kho lưu trữ tùy chỉnh my_repo với cấu hình cục bộ maven tiếp theo:

settings.xml

<server>
    <id>my_repo</id>
    <username>user</username>
    <password>pass</password>
 </server>
 ...
 <mirror>
    <id>my_repo</id>
    <name>Repo Mirror</name>
    <url><my_url_to_my_repo></url>
    <mirrorOf>*</mirrorOf>
  </mirror>
  • người dùng có quyền tạo / đọc / ghi vào my_repo -

pom.xml

<distributionManagement>
        <repository>
            <id>my_repo</id>
            <name>my_repo</name>
            <url><my_url_to_my_repo></url>
            <layout>default</layout>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Snapshots</name>
            <url><my_url_to_my_snapshot_repo></url>
        </snapshotRepository>
    </distributionManagement>

và sau đó tôi thực hiện

mvn deploy

và nhận lỗi. Bất kỳ ý tưởng?


2
HTTP 400 có nghĩa là "yêu cầu không hợp lệ". Tôi đoán một trong các URL không chính xác.
Mark O'Connor

đối với tôi, vấn đề là nó không phải là một phiên bản chụp nhanh.
maveroid

Câu trả lời:


156

Một số điều tôi có thể nghĩ đến:

  • thông tin người dùng sai
  • url đến máy chủ bị sai
  • người dùng không có quyền truy cập vào kho triển khai
  • người dùng không có quyền truy cập vào mục tiêu kho lưu trữ cụ thể
  • tạo tác đã được triển khai với phiên bản đó nếu nó là một bản phát hành (không phải phiên bản -SNAPSHOT)
  • kho lưu trữ không phù hợp để triển khai cấu phần tương ứng (ví dụ: kho lưu trữ phát hành cho phiên bản ảnh chụp nhanh, kho proxy hoặc nhóm thay vì kho lưu trữ được lưu trữ)

Kiểm tra những điều đó và nếu bạn vẫn gặp sự cố, hãy cung cấp thêm chi tiết tại đây.


44
Tôi đã thay đổi phiên bản tạo tác của mình thành SNAPSHOT rồi triển khai và tất cả đều ổn. Sau đó, tôi nhận ra rằng tôi đang cố gắng triển khai cho một nhóm Nexus (không phải kho lưu trữ Nexus), vì vậy nguyên nhân gây ra sự cố của tôi là: 'url tới hệ thống lưu trữ nexus của tôi bị sai'
acimutal 10/09/2013

5
QUAN TRỌNG: "tạo tác đã được triển khai với phiên bản đó nếu nó là bản phát hành (không phải phiên bản -SNAPSHOT)"
Bhushan

1
Đã lưu ngày của tôi ... Tôi đã xóa từ -SNAPSHOT khỏi phiên bản trong pom.xml, đó là lý do tại sao nó không thể triển khai trên nexus ... Tôi đã thêm lại từ SNAPSHOT và nó đã hoạt động ..
venugopal

3
Theo kinh nghiệm của tôi, thông tin đăng nhập sai dẫn đến 401, không phải 400. Việc gắn tên phiên bản với "-SNAPSHOT" đã khắc phục sự cố cho tôi.
Marcus Junius Brutus

1
bạn có thể chỉ cần thay đổi chính sách triển khai của kho lưu trữ của mình để cho phép triển khai lại
Furqan

35

Chỉ để tạo một câu trả lời riêng biệt. Câu trả lời thực sự được tìm thấy trong một bình luận cho câu trả lời được chấp nhận.

Hãy thử thay đổi phiên bản của đồ tạo tác của bạn để kết thúc bằng -SNAPSHOT.


2
Không, bạn đang thiếu toàn bộ điểm, hãy đọc kỹ nhận xét mà nó đề cập "vì vậy nguyên nhân của vấn đề của tôi là: 'url tới kho lưu trữ nexus của tôi bị sai'". Và nhận được một số ý tưởng về những gì đang có nghĩa là 'đang trở lại là: 400' (trước khi bạn chỉ cần sao chép ai đó bình luận như câu trả lời)
kuhajeyan

13
Tôi chỉ muốn nhận xét ở đây vì tôi đã nhấn trang này trong quá trình tìm kiếm của mình. Tôi đã gặp phải lỗi 400 tương tự và những gì bhagyas nói ở đây là chìa khóa (mặc dù tôi không nhận ra điều đó vào thời điểm đó), nếu triển khai đến kho lưu trữ ảnh chụp nhanh, phiên bản PHẢI kết thúc bằng -SNAPSHOT. Phiên bản của tôi là 1.13.0.SNAPSHOT và tôi mất một giờ để tìm ra nó cần phải là 1.13.0-SNAPSHOT.
Craig

16

400 Yêu cầu Không hợp lệ sẽ được trả lại nếu bạn cố gắng:

  1. Triển khai một tạo tác ảnh chụp nhanh (hoặc phiên bản) kết thúc bằng -SNAPSHOT cho một bản phát hành kho lưu trữ
  2. Triển khai một cấu phần phần mềm phát hành (phiên bản không kết thúc bằng -SNAPSHOT ) vào một ảnh chụp nhanh kho lưu trữ
  3. Triển khai cùng một phiên bản của một cấu phần phần mềm phát hành nhiều lần vào một kho lưu trữ phát hành


7

Hôm nay tôi gặp sự cố chính xác này và vấn đề là phiên bản tôi đang cố gắng phát hành: performance đã có trong đại diện Nexus.

Trong trường hợp của tôi, điều này có thể do ngắt kết nối mạng trong lần gọi phát hành trước đó: thực hiện. Mặc dù tôi đã mất kết nối, nhưng có vẻ như việc phát hành đã thành công.


7

Trong một trường hợp hiếm hoi mà bạn cần triển khai lại cấu phần CÙNG ỔN ĐỊNH sang Nexus, nó sẽ không thành công theo mặc định. Sau đó, nếu bạn xóa phần mềm khỏi Nexus (thông qua giao diện web) với mục đích triển khai lại, thì việc triển khai sẽ vẫn không thành công, vì chỉ xóa ví dụ: jar hoặc pom sẽ không xóa các tệp khác vẫn nằm xung quanh trong thư mục. Bạn cần đăng nhập vào hộp và xóa toàn bộ thư mục.


2
Chỉ cần thêm vào điều này, nếu bạn không có quyền truy cập tương tác vào máy chủ (tôi không - nó là hộp được quản lý), bạn có thể xóa cấu phần vi phạm bằng HTTP DELETE. Tôi sử dụng Postman cho mục đích này
Nathan Russell

Tôi không chắc có phải vì tôi đang sử dụng plugin S3 blobstore hay không, nhưng tôi không thấy cấu trúc thư mục phù hợp với cấu trúc repo. Có một số mẹo để xác định dirs nào cần xóa? Tất cả các tệp của tôi đều được đặt tên bằng băm. Các thư mục có định dạngcontent/vol-{01-43}/chap-{01-47}
majikman

Bạn cũng có thể xóa tất cả các tệp cho một bản phát hành bằng cách điều hướng đến thư mục phát hành từ kho lưu trữ, thay vì tìm kiếm tạo tác từ tìm kiếm loại GAV. Trong giao diện kho lưu trữ, bạn có thể nhấp chuột phải vào thư mục để thực hiện hành động xóa cho tất cả các tệp tại GAV đó.
Christian Trimble

3

Hôm nay tôi gặp sự cố tương tự với phần bổ sung "Mã trả lại là: 400, ReasonPhrase: Bad Request". hóa ra là vấn đề "cấu phần phần mềm đã được triển khai với phiên bản đó nếu nó là bản phát hành" từ câu trả lời ở trên nhập mô tả liên kết tại đây

Một giải pháp chưa được đề cập là định cấu hình Nexus để cho phép triển khai lại vào kho lưu trữ Bản phát hành. Có thể không phải là phương pháp hay nhất, bởi vì điều này được đặt ra là có lý do, tuy nhiên, bạn có thể đi tới "Cài đặt truy cập" trong -Tab "Cấu hình" của kho lưu trữ Nexus của mình và đặt "Chính sách triển khai" thành "Cho phép triển khai lại".


3
  • trong ứng dụng pom mẹ ==> Phiên bản đặt thẻ như sau: xxx-SNAPSHOT

ví dụ: 0.0.1-SNAPSHOT

  • "-SNAPSHOT": rất quan trọng

2

Đảm bảo rằng chưa tồn tại (cấu phần phần mềm và phiên bản) trong nexus (dưới dạng bản phát hành). Trong trường hợp đó, hãy trả lại Yêu cầu xấu.


2

Đối với lỗi 400, hãy kiểm tra kho lưu trữ "Chính sách triển khai" thường là "Tắt triển khai lại" của nó. Hầu hết thời gian phiên bản thư viện của bạn đã có sẵn đó là lý do tại sao bạn nhận được thông báo "Không thể PUT đặt" https: //yoururl/some.jar '. Đã nhận mã trạng thái 400 từ máy chủ: Kho lưu trữ không cho phép cập nhật nội dung:" của bạn tên kho lưu trữ "

Vì vậy, bạn có một vài tùy chọn để giải quyết vấn đề này. 1- cho phép triển khai lại 2- xóa phiên bản khỏi kho lưu trữ của bạn mà bạn đang cố tải lên 3- thay đổi số phiên bản


Cho phép triển khai lại kho lưu trữ bản phát hành thường không được coi là một phương pháp hay. Đừng làm điều đó mà không cân nhắc.
Itaypk

1
@Itaypk bạn nói đúng đó là lý do tại sao tôi đã đề xuất một vài gợi ý khác. Theo tôi, thay đổi phiên bản thì tốt hơn.
Furqan

1

Nếu bất kỳ câu trả lời nào ở trên hiệu quả, Bạn có thể tạo phần mềm mới trực tiếp từ phía quản trị viên của (Ảnh chụp màn hình NEXUS đính kèm bên dưới).

  1. Login to nexusUI http: // YOUR_URL: 8081 / nexus (tên người dùng: mật khẩu mặc định của quản trị viên : admin123 )
  2. Click repositories ở phía bên trái sau đó nhấp vào repo, Ví dụ: nhấp vào phát hành.
  3. Chọn artifact Upload(tab cuối cùng).
  4. Chọn GAV definitionlàm GAV Param- Sau đó nhập nhóm, id cấu phần và phiên bản của bạn.
  5. Chọn tệp Jar.
  6. Nhấp vào tải lên tạo tác. Đó là nó !

Bây giờ bạn sẽ có thể thêm nút tương ứng trong dự án của mình. (Ảnh chụp màn hình bên dưới)

nhập mô tả hình ảnh ở đây


1

Điều này cũng có thể xảy ra nếu bạn có chính sách đặt tên xung quanh phiên bản, cấm phiên bản # bạn đang cố gắng triển khai. Trong trường hợp của tôi, tôi đã cố gắng tải lên một phiên bản (để phát hành repo) 2.0.1nhưng sau đó phát hiện ra rằng cấu hình nexus của chúng tôi không cho phép bất kỳ thứ gì khác ngoài số nguyên cho các bản phát hành.

Tôi đã thử sau với phiên bản 2và triển khai thành công.

Thông báo lỗi chắc chắn không giúp được gì:

Return code is: 400, ReasonPhrase: Repository does not allow updating assets: maven-releases-xxx. -> [Help 1]

Một thông điệp tốt hơn có thể là version 2.0.1 violates naming policy


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.