Saya memiliki proyek non-Java yang menghasilkan artefak versi berversi, dan saya ingin mengunggah ini ke repositori Nexus. Karena proyek tersebut bukan Java, ia tidak menggunakan Maven untuk build. Dan saya lebih suka tidak memperkenalkan file Maven / POM hanya untuk memasukkan file ke Nexus.
Tautan di blog ke Nexus REST API semuanya berakhir di dinding masuk, tanpa tautan "buat pengguna" yang dapat saya lihat.
Jadi, apa cara terbaik (atau yang masuk akal) untuk mengunggah artefak bangunan ke repositori Nexus tanpa Maven? "bash + curl" akan bagus, atau bahkan skrip Python.
Jawaban:
Sudahkah Anda mempertimbangkan untuk menggunakan baris perintah Maven untuk mengunggah file?
Ini secara otomatis akan menghasilkan POM Maven untuk artefak tersebut.
Memperbarui
Artikel Sonatype berikut menyatakan bahwa plugin maven "deploy-file" adalah solusi termudah, tetapi juga menyediakan beberapa contoh menggunakan curl:
https://support.sonatype.com/entries/22189106-How-can-I-programatically-upload-an-artifact-into-Nexus-
sumber
Menggunakan curl:
Anda dapat melihat arti parameter di sini: https://support.sonatype.com/entries/22189106-How-can-I-programatically-upload-an-artifact-into-Nexus-
Agar izin untuk ini berfungsi, saya membuat peran baru di admin GUI dan saya menambahkan dua hak istimewa ke peran itu: Download Artefak dan Upload Artefak. Peran standar "Repo: All Maven Repositories (Kendali Penuh)" - tidak cukup. Anda tidak akan menemukannya di dokumentasi REST API yang disertakan dengan server Nexus, jadi parameter ini mungkin berubah di masa mendatang.
Pada masalah Sonatype JIRA , disebutkan bahwa mereka "akan merombak REST API (dan cara dokumentasinya dibuat) dalam rilis mendatang, kemungkinan besar akhir tahun ini".
sumber
Tidak perlu menggunakan perintah ini .. Anda dapat langsung menggunakan Antarmuka web nexus untuk mengunggah JAR Anda menggunakan parameter GAV.
Jadi sangat sederhana.
sumber
Artifact Upload
. Sayangnya, saya tidak dapat menemukan apa pun di dokumen yang menyebutkan ini ... (Sunting: Begitu , Ed , saya sudah menunjukkan ini )Anda BENAR - BENAR dapat melakukan ini tanpa menggunakan apapun yang berhubungan dengan MAVEN. Saya pribadi menggunakan NING HttpClient (v1.8.16, untuk mendukung java6).
Untuk alasan apa pun, Sonatype membuatnya sangat sulit untuk mengetahui URL, header, dan payload yang benar; dan saya harus mengendus lalu lintas dan menebak ... Ada beberapa blog / dokumentasi yang hampir tidak berguna di sana, namun tidak relevan dengan
oss.sonatype.org
, atau berbasis XML (dan saya menemukan itu bahkan tidak berfungsi). Dokumentasi omong kosong dari pihak mereka, IMHO, dan semoga para pencari masa depan dapat menemukan jawaban ini bermanfaat. Terima kasih banyak kepada https://stackoverflow.com/a/33414423/2101812 untuk kiriman mereka, karena itu sangat membantu.Jika Anda merilis di tempat lain selain
oss.sonatype.org
, ganti saja dengan host apa pun yang benar.Berikut adalah kode (berlisensi CC0) yang saya tulis untuk melakukannya. Di mana
profile
sonatype / nexus profileID Anda (seperti4364f3bbaf163
) danrepo
(seperticomdorkbox-1003
) diurai dari respons ketika Anda mengunggah POM / Jar awal Anda.Tutup repo:
Promosikan repo:
Jatuhkan repo:
Hapus kotoran tanda tangan:
Unggahan file:
EDIT1:
Cara mendapatkan aktivitas / status untuk repo
sumber
Panggilan yang perlu Anda lakukan terhadap Nexus adalah panggilan REST api.
Maven-nexus-plugin adalah plugin Maven yang dapat Anda gunakan untuk melakukan panggilan ini. Anda dapat membuat pom tiruan dengan properti yang diperlukan dan melakukan panggilan tersebut melalui plugin Maven.
Sesuatu seperti:
Hal-hal yang diasumsikan:
Pada akhirnya, semua yang dilakukan ini adalah membuat panggilan REST ke Nexus. Ada api Nexus REST lengkap tetapi saya kurang beruntung menemukan dokumentasi untuk itu yang tidak berada di balik paywall. Anda dapat mengaktifkan mode debug untuk plugin di atas dan mengetahuinya dengan menggunakan
-Dnexus.verboseDebug=true -X
.Anda juga bisa secara teoritis masuk ke UI, menyalakan panel Firebug Net, dan melihat / service POST dan menyimpulkan jalur di sana juga.
sumber
bagi mereka yang membutuhkannya di Java, menggunakan apache httpcomponents 4.0:
sumber
Di ruby https://github.com/RiotGames/nexus_cli Pembungkus CLI seputar panggilan Sonatype Nexus REST.
Contoh Penggunaan:
Konfigurasi dilakukan melalui
.nexus_cli
file.sumber
Anda juga dapat menggunakan metode penerapan langsung menggunakan curl. Anda tidak memerlukan pom untuk file Anda untuk itu tetapi itu tidak akan dibuat juga jadi jika Anda menginginkannya, Anda harus mengunggahnya secara terpisah.
Ini perintahnya:
sumber
Jika Anda memerlukan antarmuka baris perintah atau API python yang nyaman, lihat alat repositori
Dengan menggunakannya, Anda dapat mengunggah artefak ke nexus dengan perintah
Untuk membuatnya bekerja, Anda juga perlu mengatur beberapa variabel lingkungan
sumber
Anda dapat mengunggah artefak secara manual dengan mengeklik tombol unggah artefak di server Nexus dan memberikan properti GAV yang diperlukan untuk mengunggah (biasanya ini adalah struktur file untuk menyimpan artefak)
sumber
Untuk versi terbaru dari Nexus OSS (> = 3.9.0)
https://support.sonatype.com/hc/en-us/articles/115006744008-How-can-I-programmatically-upload-files-into-Nexus-3-
Contoh untuk versi 3.9.0 hingga 3.13.0:
sumber
@Adam Vandenberg Untuk kode Java untuk POST ke Nexus. https://github.com/manbalagan/nexusuploader
sumber
Anda bisa menggunakan curl sebagai gantinya.
sumber