Mengarsipkan artefak di Jenkins

132

Bisakah seseorang tolong jelaskan kepada saya ide artefak dalam proses pembangunan?

Saya memiliki direktori ruang kerja tempat saya memeriksa kode untuk mengkompilasi dan menjalankan skrip semut saya, dll. Pada akhirnya, dalam kasus saya, saya mendapatkan file jar yang siap dipasang. Apakah itu dianggap sebagai artefak?

Di mana saya harus memberi tahu skrip build saya untuk meletakkan file jar? Di direktori ruang kerja? File jar saya mendapatkan nama file yang unik tergantung pada variabel suka BUILD_IDdan sejenisnya , bagaimana saya bisa memberi tahu Jenkins file jar yang akan dipilih?

EDIT: Oke, jadi saya mencoba melakukan sesuatu seperti ini:

masukkan deskripsi gambar di sini

Path belum ada di ruang kerja saya, karena skrip build seharusnya membuatnya, dan tentu saja, .jardan .propertiesfile belum ada karena belum dibuat. Mengapa itu memberi saya kesalahan? Sepertinya saya kehilangan sesuatu.

Juga, apakah Jenkins menghapus artefak setelah masing-masing membangun (bukan artefak yang diarsipkan, saya tahu saya bisa mengatakannya untuk menghapus artefak)? Kalau tidak, itu akan menyumbat hard drive dengan cukup cepat.

Michael
sumber
12
Kesalahan yang Anda dapatkan kemungkinan besar bukan masalah - jika proses build berhasil, itu harus dibuat. Simpan dan coba ini, memiliki beberapa bangunan yang rusak saat memasang pipa sangat normal. :)
Anders Lindahl
3
Jangan takut dengan peringatan itu, jika artifak dihasilkan setelah membangun, itu akan diarsipkan oleh konfigurasi Anda (meskipun ada peringatan di halaman konfigurasi).
Huang F. Lei

Jawaban:

68

Pemahaman Anda benar, artefak dalam arti Jenkins adalah hasil dari build - output yang diinginkan dari proses build.

Sebuah konvensi umum adalah untuk meletakkan hasil build ke dalam build, targetataubin direktori .

Pengarsip Jenkins dapat menggunakan gumpalan ( target/*.jar) untuk dengan mudah mengambil file yang tepat bahkan jika Anda memiliki nama unik per build.

Anders Lindahl
sumber
@Andres terima kasih, juga, apakah jenkins menghapus artefak setelah setiap bangunan (bukan artefak yang diarsipkan, saya tahu saya bisa mengatakannya untuk menghapusnya)? atau apakah saya bertanggung jawab untuk melakukannya myslef?
Michael
6
@ Michael: Anda harus membersihkan ruang kerja sendiri, itu praktik yang baik untuk menghapus setidaknya direktori target sebelum setiap build untuk memastikan Anda tidak berakhir dengan hasil build sebelumnya.
Anders Lindahl
@Michael Anda dapat menambahkan langkah pembangunan 'bersih'. Misalnya dengan Maven -sh 'mvn clean package'
Snowcrash
@AndersLindahl - "konvensi umum adalah untuk meletakkan hasil build ke direktori build, target atau bin." Anda merujuk ke direktori bin yang dibagikan oleh semua proyek? Bagaimana aku melakukan itu? Apakah ini tindakan Pascabangun?
user3240688
@ user3240688 Tidak, saya mengacu pada folder target per proyek. Jika Anda ingin artefak dari beberapa pekerjaan menjadi satu folder bersama, Anda harus mempublikasikan artefak menggunakan misalnya salah satu plugin "Publikasikan lebih dari $ PROTOKOL".
Anders Lindahl
11

Artefak dapat merupakan hasil dari proses pembuatan Anda. Yang penting adalah bahwa tidak masalah pada klien yang dibangun itu akan dialihkan dari ruang kerja kembali ke master (server) dan disimpan di sana dengan tautan ke build. Keuntungannya adalah versi ini dibuat dengan cara ini, Anda hanya perlu mengatur cadangan pada master Anda dan bahwa semua artefak dapat diakses melalui antarmuka web, bahkan jika semua klien yang membangun sedang offline.

Dimungkinkan untuk mendefinisikan ekspresi reguler sebagai nama artefak. Dalam kasus saya, saya membuka zip semua file yang ingin saya simpan dalam satu file dengan nama konstan selama pembuatan.

Matthias Alleweldt
sumber
3
"Dimungkinkan untuk mendefinisikan ekspresi reguler sebagai nama artefak. Dalam kasus saya, saya zip semua file" Bisakah Anda menjelaskan ini? kedengarannya persis apa yang saya inginkan?
Chris Milburn
7

Juga, apakah Jenkins menghapus artefak setelah setiap pembuatan? (bukan artefak yang diarsipkan, saya tahu saya bisa mengatakannya untuk menghapusnya)

Tidak, Hudson / Jenkins tidak dengan sendirinya membersihkan ruang kerja setelah membangun. Anda mungkin memiliki tindakan dalam proses pembuatan yang menghapus, menimpa, atau memindahkan artefak pembuatan dari tempat Anda meninggalkannya. Ada opsi dalam konfigurasi pekerjaan, dalam Opsi Proyek Tingkat Lanjut (yang harus diperluas), yang disebut "Bersihkan ruang kerja sebelum membangun" yang akan menghapus ruang kerja di awal bangunan baru.

Codex24
sumber
1

Di Jenkins 2.60.3 ada cara untuk menghapus artefak build (bukan artefak yang diarsipkan) untuk menghemat ruang hard drive pada mesin build. Di bagian Umum, centang "Buang bangunan lama" dengan strategi "Log Rotation" dan kemudian masuk ke opsi Advanced-nya. Dua opsi lagi akan muncul terkait dengan menjaga artefak untuk pekerjaan berdasarkan jumlah hari atau pembuatan.

Pengaturan yang berfungsi untuk saya adalah memasukkan 1 untuk "Jumlah bangunan maksimum agar tetap dengan artefak" dan kemudian memiliki tindakan pasca-pembangunan untuk mengarsipkan artefak. Dengan cara ini, semua artefak dari semua bangunan akan diarsipkan, semua informasi dari bangunan akan disimpan, tetapi hanya bangunan terakhir yang akan menyimpan artefaknya sendiri.

Buang opsi bangunan lama

Mat
sumber