2016-04-16 14 views
5

Tôi đang cố gắng để Jenkins thực thi lệnh shell nhưng vẫn cho phép sử dụng các ký tự đại diện. Dưới đây là những gì tôi đang cố gắng để làm cho tài liệu tham khảo:Jenkins - Thực hiện các lệnh shell với các ký tự đại diện

mvn deploy:deploy-file -Dpackaging=jar -DrepositoryId=snapshots -Durl=http://nexus.example.net/content/repositories/snapshots -DpomFile=Spigot/Spigot-Server/pom.xml -Dfile=Spigot/Spigot-Server/target/spigot-*.jar 

tôi cần để có thể triển khai jar này thông qua lệnh trên vì kho git cho dự án đó không được sở hữu hoặc vận hành bởi tôi, vì vậy tôi cần để có thể triển khai trực tiếp ứng dụng Nexus của riêng tôi. Để đảm bảo rằng nó sẽ hỗ trợ tất cả các phiên bản có thể có của jar đã biên dịch, tôi phải sử dụng một thẻ hoang dã. Thật không may, khi Jenkins cố gắng thực hiện lệnh, nó có nghĩa là ký tự đại diện. Tôi thực sự không chắc chắn làm thế nào để giải quyết điều này, tôi sẽ đánh giá cao bất kỳ sự giúp đỡ bạn có thể cung cấp. Cảm ơn bạn!

Trả lời

2

Nếu đó là một đơn giản tập tin .jar đơn thử điều này:

mvn deploy:deploy-file -Dpackaging=jar -DrepositoryId=snapshots -Durl=http://nexus.example.net/content/repositories/snapshots -DpomFile=Spigot/Spigot-Server/pom.xml -Dfile=$(find Spigot/Spigot-Server/target/ -name 'spigot-*.jar') 

Nếu đó là nhiều file, nó phức tạp hơn một chút :

Các maven triển khai file thông số file, phân loạiloại được sử dụng khi bạn muốn triển khai nhiều hiện vật thuộc cùng(groupId, artifactId, phiên bản) - ví dụ như một .jar-sources.jar

Thậm chí cho rằng trường hợp sử dụng, cú pháp có phần phản trực giác - bạn phải sử dụng tệp = file1.jar cho tạo phẩm đầu tiên và sau đó tệp = file1-sources.jar, file1-test-sources.zip, .. cho còn lại, trong khi sử dụng phân/phân loại (và bao bì/loại) trong cùng một cách (vị trí) để xác định phân loại/loại của mỗi vật bạn đang tải lên.

Nếu trường hợp sử dụng của bạn là vật upload các phiên bản khác nhau, bạn sẽ cần phải làm một maven gọi triển khai-file cho mỗi phiên bản.

Bạn cũng có thể xem xét một số lựa chọn thay thế:

  1. (tùy thuộc vào có bao nhiêu cổ vật, và những cái mới sẽ đến mức độ thường xuyên) - tải lên những đồ tạo tác bằng tay Nexus

  2. Làm cho bạn Nexus proxy một kho lưu trữ Nexus khác phục vụ các hiện vật này.

+0

Cảm ơn bạn rất nhiều! Đối với hồ sơ, tôi chỉ cố gắng triển khai một tệp duy nhất. – mattrick

1

Nếu bạn có nghĩa là bạn chỉ muốn những * để được thông qua trên trực tiếp, chỉ cần sử dụng dấu nháy đơn để tránh vỏ từ việc áp dụng globbing:

mvn deploy:deploy-file [...] '-Dfile=Spigot/Spigot-Server/target/spigot-*.jar' 
+0

Tôi thực sự muốn điều ngược lại. Nó _doesn't_ glob đó là vấn đề. – mattrick

+0

@mattrick: Ah. Nó có lẽ sẽ đáng làm rõ điều đó. Bạn có thể cần phải làm điều đó trong nhiều lệnh ... không chắc chắn. –

+0

@JonSkeet, FWIW, bài viết không nói "nó lấy ký tự đại diện theo nghĩa đen" :-) Thật thú vị, nếu lệnh được chạy trong bash bên ngoài của Jenkins, vỏ thực sự cố gắng để glob trước khi thực hiện lệnh trừ khi đề xuất báo giá của bạn được theo sau. Không chắc chắn tại sao vỏ Jenkins không tuân theo cùng một hành vi. –

0

Nếu bạn đang cố gắng triển khai nhiều file tôi nghĩ rằng vấn đề là không phải với lệnh Jenkins hoặc bash, nhưng với việc sử dụng Maven Deploy Plugin.

Tài liệu khẳng định

file File - File to be deployed. 
User property is: file. 

và nếu bạn muốn triển khai các đồ tạo tác thêm, sử dụng

files  String - A comma separated list of files for each of the 
        extra side artifacts to deploy. If there is a 
        mis-match in the number of entries in types or 
        classifiers, then an error will be raised. 
User property is: files. 

Như vậy sẽ tốt hơn nếu bạn chỉ định thêm file đến triển khai một cách rõ ràng bằng cách sử dụng thêm files, types, classifies thông số, ex .:

... -Dfile=Spigot/Spigot-Server/target/main-spigot.jar \ 
-Dfiles=$(ls -1d Spigot/Spigot-Server/target/spigot-*.jar | paste -sd ,) -Dtypes=... -Dclassifiers=... 
Các vấn đề liên quan