Hal pertama yang pertama, arahkan mouse ke area abu-abu di bawah. Bukan bagian dari jawaban, tetapi mutlak harus dijawab:
Jika Anda memiliki skrip shell yang melakukan "checkout, build, deploy" dengan sendirinya, lalu mengapa Anda menggunakan Jenkins? Anda mengabaikan semua fitur Jenkins yang menjadikannya seperti sekarang. Anda mungkin juga meminta cron atau hook pasca-komit SVN untuk memanggil skrip secara langsung. Jenkins yang melakukan pembayaran SVN sendiri sangatlah penting. Ini memungkinkan build untuk dipicu hanya jika ada perubahan (atau dengan timer, atau manual, jika Anda mau). Ini melacak perubahan di antara build. Ini menunjukkan perubahan tersebut, sehingga Anda dapat melihat build mana untuk kumpulan perubahan mana. Ini mengirim email kepada pelaku ketika perubahan mereka menyebabkan build yang berhasil atau gagal (sekali lagi, sesuai konfigurasi yang Anda inginkan). Ini akan mengirim email kepada pelaku ketika perbaikan mereka memperbaiki build yang gagal. Dan lebih banyak lagi. Jenkins yang mengarsipkan artefak juga membuatnya tersedia, per bangunan, langsung dari Jenkins. Meskipun tidak sepenting checkout SVN, ini sekali lagi merupakan bagian integral dari apa yang menjadikannya Jenkins. Sama dengan penerapan. Kecuali Anda memiliki satu lingkungan, penerapan biasanya terjadi pada beberapa lingkungan. Jenkins dapat melacak lingkungan mana yang dibuat oleh build tertentu (dengan kumpulan perubahan SVN tertentu) yang diterapkan, melalui penggunaan Promosi. Anda meninggalkan semua ini. Kedengarannya seperti Anda diberitahu "Anda harus menggunakan Jenkins" tetapi Anda tidak benar-benar menginginkannya, dan Anda melakukannya hanya untuk melepaskan bos Anda, hanya untuk memberi tanda centang "ya, saya telah menggunakan Jenkins"
Jawaban singkatnya adalah: kode keluar dari perintah terakhir dari langkah build Execute Shell Jenkin adalah yang menentukan keberhasilan / kegagalan Langkah Build . 0
- sukses, anything else
- kegagalan. Catatan, ini menentukan keberhasilan / kegagalan langkah build , bukan seluruh pekerjaan yang dijalankan . Keberhasilan / kegagalan dari seluruh pekerjaan yang dijalankan selanjutnya dapat dipengaruhi oleh beberapa langkah build, serta tindakan dan plugin pasca-build.
Anda telah menyebutkan Build step 'Execute shell' marked build as failure
, jadi kami akan fokus hanya pada satu langkah pembuatan. Jika langkah Execute shell build Anda hanya memiliki satu baris yang memanggil skrip shell Anda, kode keluar dari skrip shell Anda akan menentukan keberhasilan / kegagalan langkah build. Jika Anda memiliki lebih banyak baris, setelah eksekusi skrip shell, tinjau dengan cermat, karena baris itulah yang dapat menyebabkan kegagalan.
Terakhir, baca di sini Skrip Build Jenkins keluar setelah Google Test dijalankan . Ini tidak terkait langsung dengan pertanyaan Anda, tetapi perhatikan bahwa bagian tentang Jenkins yang meluncurkan langkah build Execute Shell , sebagai skrip shell dengan/bin/sh -xe
The -e
berarti bahwa script shell akan keluar dengan kegagalan, bahkan jika hanya 1 perintah gagal, bahkan jika Anda melakukan pengecekan error untuk perintah itu (karena keluar naskah sebelum sampai ke pengecekan error Anda). Ini bertentangan dengan eksekusi normal skrip shell, yang biasanya mencetak pesan kesalahan untuk perintah yang gagal (atau mengalihkannya ke null dan menanganinya dengan cara lain), dan lanjutkan.
Untuk menghindari ini, tambahkan set +e
ke bagian atas skrip shell Anda.
Karena Anda mengatakan skrip Anda melakukan semua yang seharusnya dilakukan, kemungkinan besar perintah yang gagal ada di suatu tempat di akhir skrip. Mungkin gema terakhir? Atau salinan artefak di suatu tempat? Tanpa melihat keluaran konsol secara lengkap, kami hanya menebak-nebak.
Silakan posting keluaran konsol dari pekerjaan yang dijalankan, dan sebaiknya juga skrip shell itu sendiri, dan kemudian kami dapat memberi tahu Anda dengan tepat baris mana yang gagal.