Dalam sebuah proyek yang saya kerjakan, kami menggunakan skrip shell untuk menjalankan tugas yang berbeda. Beberapa adalah skrip sh / bash yang menjalankan rsync, dan beberapa lagi adalah skrip PHP. Salah satu skrip PHP menjalankan beberapa tes integrasi yang menghasilkan output ke XML JUnit, laporan cakupan kode, dan sejenisnya.
Jenkins dapat menandai pekerjaan sebagai berhasil / gagal berdasarkan status keluar . Di PHP, skrip keluar dengan 1 jika telah mendeteksi bahwa pengujian gagal selama berjalan. Skrip shell lainnya menjalankan perintah dan menggunakan kode keluar dari skrip tersebut untuk menandai build sebagai gagal.
// :: End of PHP script:
// If any tests have failed, fail the build
if ($build_error) exit(1);
Dalam Jenkins Terminology , build yang tidak stabil didefinisikan sebagai:
Sebuah bangunan tidak stabil jika berhasil dibangun dan satu atau beberapa penerbit melaporkannya tidak stabil. Misalnya jika penerbit JUnit dikonfigurasi dan pengujian gagal, maka build akan ditandai tidak stabil.
Bagaimana cara membuat Jenkins menandai build sebagai tidak stabil, bukan hanya berhasil / gagal saat menjalankan skrip shell?
Jawaban:
Gunakan plugin pencari teks .
Daripada keluar dengan status 1 (yang akan gagal membangun), lakukan:
if ($build_error) print("TESTS FAILED!");
Dari pada tindakan pasca-pembuatan, aktifkan Pencari Teks, setel ekspresi reguler agar cocok dengan pesan yang Anda cetak (
TESTS FAILED!
) dan centang kotak "Tidak stabil jika ditemukan" di bawah entri itu.sumber
Versi Jenkins modern (sejak 2.26, Oktober 2016) memecahkan masalah ini: ini hanya opsi lanjutan untuk langkah build Execute shell!
Anda tinggal memilih dan menetapkan nilai keluar yang sewenang-wenang; jika cocok, build tersebut akan menjadi tidak stabil. Pilih saja nilai yang tidak mungkin diluncurkan oleh proses nyata dalam build Anda.
sumber
sh
perintah langkah di aJenkinsfile
? Di manakah letak pengaturan di GUI? Saya tidak dapat menemukannya.Itu dapat dilakukan tanpa mencetak string ajaib dan menggunakan TextFinder. Berikut beberapa info tentangnya.
Pada dasarnya Anda memerlukan file .jar dari http: // yourserver.com / cli yang tersedia dalam skrip shell, lalu Anda dapat menggunakan perintah berikut untuk menandai build tidak stabil:
Untuk menandai build tidak stabil pada kesalahan, Anda dapat menggunakan:
Masalahnya adalah jenkins-cli.jar harus tersedia dari skrip shell. Anda dapat meletakkannya di jalur yang mudah diakses, atau mengunduhnya melalui skrip shell pekerjaan:
wget ${JENKINS_URL}jnlpJars/jenkins-cli.jar
sumber
set-build-result
sudah tidak digunakan lagi dijenkins-cli
.Anda harus menggunakan Jenkinsfile untuk membungkus skrip build Anda dan cukup tandai build saat ini sebagai UNSTABLE dengan menggunakan
currentBuild.result = "UNSTABLE"
.sumber
UNSTABLE
)? Tampaknya lebih mudah daripada jawaban lainnya.Expected one of "steps", "stages", or "parallel" for stage
ketika saya mencoba mengatur currentBuild.result langsung di dalam panggung.Anda juga harus bisa menggunakan groovy dan melakukan apa yang dilakukan oleh textfinder
menandai build sebagai tidak stabil dengan plugin pasca-build yang keren
if(manager.logContains("Could not login to FTP server")) { manager.addWarningBadge("FTP Login Failure") manager.createSummary("warning.gif").appendText("<h1>Failed to login to remote FTP Server!</h1>", false, false, false, "red") manager.buildUnstable() }
Lihat juga Plugin Groovy Postbuild
sumber
Dalam skrip pekerjaan saya, saya memiliki pernyataan berikut (pekerjaan ini hanya berjalan pada master Jenkins):
# This is the condition test I use to set the build status as UNSTABLE if [ ${PERCENTAGE} -gt 80 -a ${PERCENTAGE} -lt 90 ]; then echo WARNING: disc usage percentage above 80% # Download the Jenkins CLI JAR: curl -o jenkins-cli.jar ${JENKINS_URL}/jnlpJars/jenkins-cli.jar # Set build status to unstable java -jar jenkins-cli.jar -s ${JENKINS_URL}/ set-build-result unstable fi
Anda dapat melihat ini dan lebih banyak informasi tentang pengaturan status build di wiki Jenkins: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
sumber
Konfigurasikan build PHP untuk menghasilkan laporan junit xml
<phpunit bootstrap="tests/bootstrap.php" colors="true" > <logging> <log type="junit" target="build/junit.xml" logIncompleteSkipped="false" title="Test Results"/> </logging> .... </phpunit>
Selesaikan skrip build dengan status 0
... exit 0;
Tambahkan tindakan pasca-pembuatan Publikasikan laporan hasil pengujian JUnit untuk XML laporan pengujian. Plugin ini akan mengubah build Stabil menjadi Tidak Stabil saat pengujian gagal.
Tambahkan plugin Jenkins Text Finder dengan pemindaian keluaran konsol dan opsi yang tidak dicentang. Plugin ini gagal secara keseluruhan karena kesalahan fatal.
sumber
Saya menemukan cara paling fleksibel untuk melakukan ini adalah dengan membaca file di plugin groovy post build.
import hudson.FilePath import java.io.InputStream def build = Thread.currentThread().executable String unstable = null if(build.workspace.isRemote()) { channel = build.workspace.channel; fp = new FilePath(channel, build.workspace.toString() + "/build.properties") InputStream is = fp.read() unstable = is.text.trim() } else { fp = new FilePath(new File(build.workspace.toString() + "/build.properties")) InputStream is = fp.read() unstable = is.text.trim() } manager.listener.logger.println("Build status file: " + unstable) if (unstable.equalsIgnoreCase('true')) { manager.listener.logger.println('setting build to unstable') manager.buildUnstable() }
Jika konten file adalah 'true', build akan disetel ke tidak stabil. Ini akan bekerja pada master lokal dan pada semua budak tempat Anda menjalankan pekerjaan, dan untuk semua jenis skrip yang dapat menulis ke disk.
sumber
TextFinder hanya berfungsi jika status pekerjaan belum diubah dari SUCCESS menjadi FAILED atau ABORTED. Untuk kasus seperti itu, gunakan skrip yang menarik di langkah PostBuild:
errpattern = ~/TEXT-TO-LOOK-FOR-IN-JENKINS-BUILD-OUTPUT.*/; manager.build.logFile.eachLine{ line -> errmatcher=errpattern.matcher(line) if (errmatcher.find()) { manager.build.@result = hudson.model.Result.NEW-STATUS-TO-SET } }
Lihat detail lebih lanjut dalam posting yang saya tulis tentang ini: http://www.tikalk.com/devops/JenkinsJobStatusChange/
sumber
Menggandakan jawaban saya dari sini karena saya menghabiskan beberapa waktu untuk mencari ini:
Ini sekarang dapat dilakukan di versi Jenkins yang lebih baru, Anda dapat melakukan sesuatu seperti ini:
#!/usr/bin/env groovy properties([ parameters([string(name: 'foo', defaultValue: 'bar', description: 'Fails job if not bar (unstable if bar)')]), ]) stage('Stage 1') { node('parent'){ def ret = sh( returnStatus: true, // This is the key bit! script: '''if [ "$foo" = bar ]; then exit 2; else exit 1; fi''' ) // ret can be any number/range, does not have to be 2. if (ret == 2) { currentBuild.result = 'UNSTABLE' } else if (ret != 0) { currentBuild.result = 'FAILURE' // If you do not manually error the status will be set to "failed", but the // pipeline will still run the next stage. error("Stage 1 failed with exit code ${ret}") } } }
Generator Sintaks Pipeline menunjukkan ini di tab lanjutan:
sumber
Saya pikir saya akan memposting jawaban lain untuk orang-orang yang mungkin mencari sesuatu yang serupa.
Dalam pekerjaan pembangunan kita, kita memiliki kasus-kasus di mana kita ingin pembangunan dilanjutkan, tetapi ditandai sebagai tidak stabil. Untuk kami ini terkait dengan nomor versi.
Jadi, saya ingin mengatur kondisi pada build dan mengatur build menjadi tidak stabil jika kondisi itu terpenuhi.
Saya menggunakan opsi Langkah bersyarat (tunggal) sebagai langkah pembuatan.
Kemudian saya menggunakan skrip Execute system Groovy sebagai langkah build yang akan berjalan ketika kondisi itu terpenuhi.
Saya menggunakan Perintah Groovy dan mengatur skrip berikut ini
import hudson.model.* def build = Thread.currentThread().executable build.@result = hudson.model.Result.UNSTABLE return
Sepertinya itu bekerja dengan cukup baik.
Saya menemukan solusinya di sini
http://tech.akom.net/archives/112-Marking-Jenkins-build-UNSTABLE-from-environment-inject-groovy-script.html
sumber
Sebagai alternatif yang lebih ringan dari jawaban yang ada, Anda dapat menyetel hasil build dengan HTTP POST sederhana untuk mengakses REST API konsol skrip Groovy :
curl -X POST \ --silent \ --user "$YOUR_CREDENTIALS" \ --data-urlencode "script=Jenkins.instance.getItemByFullName( '$JOB_NAME' ).getBuildByNumber( $BUILD_NUMBER ).setResult( hudson.model.Result.UNSTABLE )" $JENKINS_URL/scriptText
Keuntungan:
Untuk solusi ini, lingkungan Anda harus memenuhi ketentuan berikut:
sumber
Salah satu cara mudah untuk menyetel build sebagai tidak stabil adalah di blok "eksekusi shell" Anda, jalankan
exit 13
sumber
Anda cukup memanggil "exit 1", dan build akan gagal pada saat itu dan tidak dapat dilanjutkan. Saya akhirnya membuat fungsi passthrough make untuk menanganinya untuk saya, dan memanggil safemake alih-alih membuat untuk bangunan:
function safemake { make "$@" if [ "$?" -ne 0 ]; then echo "ERROR: BUILD FAILED" exit 1 else echo "BUILD SUCCEEDED" fi }
sumber
if make "$@"; then echo "BUILD SUCCEEDED"; else rc=$?; echo "BUILD FAILED"; exit $rc; fi