Bagaimana cara memberi tahu Jenkins / Hudson untuk memicu build hanya untuk perubahan pada proyek tertentu di pohon Git saya?
87
Plugin Git memiliki opsi (wilayah yang dikecualikan) untuk menggunakan regex guna menentukan apakah akan melewati pembuatan berdasarkan apakah file dalam komit cocok dengan regex wilayah yang dikecualikan.
Sayangnya, plugin Git stok saat ini tidak memiliki fitur "wilayah yang disertakan" (1.15). Namun, seseorang memposting tambalan di GitHub yang berfungsi di Jenkins dan Hudson yang menerapkan fitur yang Anda inginkan.
Ini adalah pekerjaan kecil untuk dibangun, tetapi berfungsi seperti yang diiklankan dan sangat berguna karena salah satu pohon Git saya memiliki beberapa proyek independen.
https://github.com/jenkinsci/git-plugin/pull/49
Pembaruan: Plugin Git (1.16) sekarang memiliki fitur wilayah 'disertakan'.
Ignored commit c6e2b1dca0d1885: No paths matched included region whitelist
. Ada petunjuk? Detail lebih lanjut di sini: stackoverflow.com/questions/47439042/…Pada dasarnya, Anda membutuhkan dua pekerjaan. Satu untuk memeriksa apakah file berubah dan satu untuk melakukan build yang sebenarnya:
Pekerjaan # 1
Ini harus dipicu pada perubahan di repositori Git Anda. Ini kemudian menguji apakah jalur yang Anda tentukan ("src" di sini) memiliki perubahan dan kemudian menggunakan CLI Jenkins untuk memicu pekerjaan kedua.
Pekerjaan # 2
Konfigurasi pekerjaan ini untuk mengambil parameter GIT_REVISION seperti itu, untuk memastikan Anda membuat revisi persis seperti yang dipilih oleh pekerjaan pertama untuk dibuat.
sumber
$? || exit 0
...test $? -eq 0 || exit 0
mungkin?Jika Anda menggunakan sintaks deklaratif Jenkinsfile untuk mendeskripsikan pipeline bangunan Anda, Anda bisa menggunakan kondisi changeset untuk membatasi eksekusi tahapan hanya pada kasus ketika file tertentu diubah. Ini sekarang menjadi fitur standar Jenkins dan tidak memerlukan konfigurasi / perangkat lunak tambahan.
Anda dapat menggabungkan beberapa ketentuan menggunakan
anyOf
atauallOf
kata kunci untuk ATAU atau DAN perilaku yang sesuai:sumber
Meskipun ini tidak memengaruhi pekerjaan tunggal, Anda dapat menggunakan skrip ini untuk mengabaikan langkah-langkah tertentu jika komit terbaru tidak berisi perubahan apa pun:
sumber
api/
foldernya.) Jika Anda dapat memperbaiki ini, saya akan menyukai perubahan yang disarankan !Jika logika untuk memilih file tidak sepele, saya akan memicu eksekusi skrip pada setiap perubahan dan kemudian menulis skrip untuk memeriksa apakah memang diperlukan build, lalu memicu build jika diperlukan.
sumber
Anda dapat menggunakan Plugin Pemicu Webhook Generik untuk ini.
Dengan variabel suka
changed_files
dan ekspresi$.commits[*].['modified','added','removed'][*]
.Anda dapat memiliki teks filter seperti
$changed_files
dan filter regexp seperti"folder/subfolder/[^"]+?"
jikafolder/subfolder
folder yang harus memicu build.sumber
Saya menjawab pertanyaan ini di posting lain:
Cara mendapatkan daftar file yang diubah sejak pembuatan terakhir di Jenkins / Hudson
Anda dapat menambahkan pemeriksaan langsung ke bagian atas shell exec pekerjaan, dan ini akan terjadi
exit 0
jika tidak ada perubahan yang terdeteksi ... Oleh karena itu, Anda selalu dapat melakukan polling di tingkat teratas untuk check-in guna memicu build.sumber
Saya menulis skrip ini untuk melewati atau menjalankan tes jika ada perubahan:
Jadi Anda bisa melakukan sesuatu seperti:
./scripts/git-run-if-changed.sh cmd vendor go.mod go.sum fixtures/ tools/ -- go test
sumber