git, maven dan jenkins - versi, dev dan rilis builds workflow

12

Apa cara yang disukai untuk melakukan hal berikut dengan git, maven dan jenkins:

Saya mengembangkan aplikasi, yang ingin saya pertahankan cabang "dev" dan "release". Saya ingin jenkins membangun keduanya. Bisa jadi artefak rilis memiliki versi seperti 1.5.2 dan dev-build hanya akan menjadi 0.0.1-SNAPSHOTs. Saya ingin tidak harus memiliki 2 file pom.xml berbeda.

Saya melihat profil, tetapi mereka tampaknya tidak dapat mengubah versi artefak. Salah satu cara saya melihat bisa menambahkan 'kualifikasi' ke test-build. Tentu saja saya bisa mengganti nama file tersebut, karena informasi artefak yang sebenarnya mengenai hal ini tidak penting, karena aplikasi ini adalah aplikasi mandiri.

Apa cara yang lebih disukai untuk melakukan ini? Atau bagaimana Anda akan melakukan ini?

varesa
sumber

Jawaban:

3

Saya akan membayangkan harus ada hubungan yang melekat antara cabang-cabang ini yang harus mengatasi masalah nomor versi.

Melepaskan

Saya akan membayangkan Anda mungkin melakukan sesuatu seperti menggabungkan kode siap produksi dari cabang dev ke cabang rilis, kemudian melakukan rilis Maven (melalui Jenkins atau secara manual). Ini secara otomatis menggulung nomor versi ke bangunan berikutnya. Jadi, Anda menggabungkan kode 1.4.7-SNAPSHOT ke cabang ini, melakukan rilis dan memotong versi 1.4.7, dan Maven otomatis menggulung copy pekerjaan Anda ke 1.4.8-SNAPSHOT.

Memperbarui Baseline (opsional)

Jika Anda belum menggunakan bagasi Anda (atau cabang baseline, dll) sebagai tempat untuk rilis Anda, Anda harus memperbarui bagasi segera setelah Anda menyelesaikan rilis. Ini berarti nomor versi Anda juga diperbarui. Langkah ini mungkin bisa diperdebatkan jika Anda hanya menganggap cabang rilis sebagai baseline.

Naik-gabungkan dari Baseline ke Dev Branch

Sangat penting bahwa cabang pengembangan Anda tetap mengetahui kode produksi aktual . Anda perlu menggabungkan kode dari baseline (atau melepaskan cabang, tergantung pada implementasi) hingga cabang pengembangan Anda. Ini penting dalam kasus Anda karena itu berarti perubahan pom yang terjadi selama proses rilis, yang mengubah versi menjadi 1.4.8-SNAPSHOT, dibawa ke cabang ini.


Berdasarkan bacaan yang telah saya lakukan (serta proses dengan di organisasi saya), ini tampaknya menjadi standar yang cukup dan efektif menggunakan rilis dan snapshot Maven, dan daripada mempertahankan nomor versi yang benar-benar terputus pada cabang yang berbeda, mudah untuk mengatakannya. bahwa build 1.4.7-SNAPSHOT sebenarnya adalah pendahulu langsung dari rilis 1.4.7. Mereka terkait. Saya akan mengatakan lebih jauh jika Anda tidak melakukan penggabungan bolak-balik di antara cabang-cabang ini, Anda melakukan kesalahan versi SCM dan Maven, dan Anda berisiko terhadap pengembangan kode yang tidak cocok dengan produksi , memperkenalkan kembali bug ke produksi, dll.

RonU
sumber
Maksudnya "maven release", maksud Anda maven-release-plugin?
varesa
Ya. Anda juga dapat mengatur build tertentu di Jenkins menjadi build Maven Release, yang memanggil plugin maven-release-plugin.
RonU
Itu seperti "kunci" yang telah dicari. Terima kasih!
varesa
1

Pikirkan kembali pendekatan Anda.

Sangat umum untuk menggunakan misalnya 1.4.2 untuk versi rilis dan kemudian 1.4.3-SNAPSHOT untuk pengembangan ke yang berikutnya.

Ketika Anda perlu mempertahankan rilis 1.4.2 KEMUDIAN cabang itu dari komit yang berasal artefak 1.4.2 Anda.

Kemudian Anda memberi tahu Jenkins lokasi repositori dan nama cabang Anda, menghasilkan kumpulan file yang sedang diperiksa, dan kemudian Anda memberi tahu Jenkins untuk menggunakan pakar pada proyek Anda untuk membangunnya.

Catatan: Saya telah menemukan bahwa sangat bermanfaat menggunakan pom.xml tunggal untuk membangun artefak yang sebenarnya dan pom.xml lain untuk membuat bit aktual untuk dikirim ke pelanggan.


sumber