Maven Deploy ke Nexus

1. Ikhtisar

Dalam artikel sebelumnya, saya membahas bagaimana proyek Maven dapat menginstal secara lokal jar pihak ketiga yang belum diterapkan di Maven Central (atau di salah satu repositori besar dan yang dihosting secara publik).

Solusi itu hanya boleh diterapkan dalam proyek kecil di mana memasang, menjalankan, dan memelihara server Nexus lengkap mungkin berlebihan. Namun, seiring pertumbuhan proyek,

Nexus dengan cepat menjadi satu-satunya pilihan yang nyata dan dewasa untuk menghosting artefak pihak ketiga, serta untuk menggunakan kembali artefak internal di seluruh aliran pengembangan.

Artikel ini akan menunjukkan cara menyebarkan artefak proyek ke Nexus, dengan Maven .

2. Persyaratan Nexus di pom.xml

Agar Maven dapat menerapkan artefak yang dibuatnya dalam fase paket build, Maven perlu menentukan informasi repositori tempat artefak terpaket akan diterapkan, melalui elemen distributionManagement :

 nexus-snapshots //localhost:8081/nexus/content/repositories/snapshots 

Repositori Snapshots publik yang dihosting sudah tersedia di Nexus, jadi tidak perlu membuat atau mengonfigurasi apa pun lebih lanjut. Nexus memudahkan untuk menentukan URL dari repositori yang dihosting - setiap repositori menampilkan entri yang tepat untuk ditambahkan didari project pom, di bawah tab Summary .

3. Plugin

Secara default, Maven menangani mekanisme penerapan melalui maven-deploy-plugin - ini dipetakan ke fase penerapan siklus hidup Maven default:

 maven-deploy-plugin 2.8.1 default-deploy deploy deploy 

The maven-menyebarkan-plugin adalah pilihan yang layak untuk menangani tugas menyebarkan artefak dari sebuah proyek untuk Nexus, tapi itu tidak dibangun untuk mengambil keuntungan penuh dari apa Nexus memiliki tawaran. Karena fakta itu, Sonatype membuat plugin khusus Nexus - plugin nexus-staging-maven - yang sebenarnya dirancang untuk memanfaatkan sepenuhnya fungsionalitas yang lebih canggih yang ditawarkan Nexus - fungsionalitas seperti staging.

Meskipun untuk proses penerapan yang sederhana kami tidak memerlukan fungsionalitas pementasan, kami akan terus menggunakan plugin Nexus khusus ini karena dibuat dengan tujuan yang jelas untuk berbicara dengan Nexus dengan baik.

Satu-satunya alasan untuk menggunakan maven-deploy-plugin adalah untuk tetap membuka opsi untuk menggunakan alternatif Nexus di masa mendatang - misalnya, repositori Artifactory. Namun, tidak seperti komponen lain yang mungkin benar-benar berubah sepanjang siklus hidup proyek, Manajer Repositori Maven sangat tidak mungkin berubah, sehingga fleksibilitas tidak diperlukan.

Jadi, langkah pertama dalam menggunakan plugin penerapan lain dalam fase penerapan adalah menonaktifkan pemetaan default yang sudah ada:

 org.apache.maven.plugins maven-deploy-plugin ${maven-deploy-plugin.version} true 

Sekarang, kita dapat mendefinisikan:

 org.sonatype.plugins nexus-staging-maven-plugin 1.5.1 default-deploy deploy deploy nexus //localhost:8081/nexus/ true 

The menyebarkan Tujuan dari plugin dipetakan ke menyebarkan fase Maven membangun.

Perhatikan juga bahwa, seperti yang telah dibahas, kami tidak memerlukan fungsionalitas pementasan dalam penerapan sederhana artefak -SNAPSHOT ke Nexus, sehingga sepenuhnya dinonaktifkan melalui elemen.

Secara default, tujuan penerapan menyertakan alur kerja penahapan, yang direkomendasikan untuk build rilis.

4. Pengaturan global.xml

Penyebaran ke Nexus adalah operasi yang aman - dan pengguna penerapan ada untuk tujuan ini di luar kotak pada semua contoh Nexus.

Mengonfigurasi Maven dengan kredensial pengguna penerapan ini , sehingga dapat berinteraksi dengan benar dengan Nexus, tidak dapat dilakukan di pom.xml proyek. Ini karena sintaks pom tidak memungkinkan, belum lagi fakta bahwa pom mungkin merupakan artefak publik, jadi tidak cocok untuk menyimpan informasi kredensial.

Kredensial server harus ditentukan dalam pengaturan Maven global.xml :

 nexus-snapshots deployment the_pass_for_the_deployment_user 

Server juga dapat dikonfigurasi untuk menggunakan keamanan berbasis kunci, bukan kredensial mentah dan teks biasa.

5. Proses Penerapan

Melakukan proses penerapan adalah tugas sederhana:

mvn clean deploy -Dmaven.test.skip=true

Melewati pengujian tidak masalah dalam konteks pekerjaan penerapan karena pekerjaan ini harus menjadi pekerjaan terakhir dari pipeline penerapan untuk proyek tersebut.

Contoh umum dari pipeline penerapan seperti itu adalah suksesi tugas Jenkins, masing-masing memicu tugas berikutnya hanya jika berhasil diselesaikan. Dengan demikian, tugas sebelumnya dalam pipeline bertanggung jawab untuk menjalankan semua rangkaian pengujian dari project - pada saat tugas penerapan dijalankan, semua pengujian seharusnya sudah lulus.

Jika menjalankan satu perintah, pengujian dapat tetap aktif untuk dijalankan sebelum fase penerapan dijalankan:

mvn clean deploy

6. Kesimpulan

Ini adalah solusi sederhana namun sangat efektif untuk menerapkan artefak Maven ke Nexus.

Ini juga agak beropini - nexus-staging-maven-plugin digunakan sebagai pengganti maven-deploy-plugin default ; fungsionalitas pementasan dinonaktifkan, dll - pilihan inilah yang membuat solusi menjadi sederhana dan praktis.

Kemungkinan mengaktifkan fungsionalitas pementasan penuh dapat menjadi subjek artikel mendatang.

Terakhir, kita akan membahas Proses Rilis di artikel berikutnya.