Seperti disebutkan dalam " Polling harus mati: memicu Jenkins membangun dari hook git ", Anda dapat memberi tahu Jenkins tentang komitmen baru:
Dengan plugin Git terbaru 1.1.14 (yang baru saja saya lepaskan sekarang), Anda sekarang dapat melakukan ini lebih mudah dengan hanya menjalankan perintah berikut:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
Ini akan memindai semua pekerjaan yang dikonfigurasikan untuk memeriksa URL yang ditentukan, dan jika mereka juga dikonfigurasi dengan polling, itu akan segera memicu polling (dan jika itu menemukan perubahan yang layak untuk build, build akan dipicu pada gilirannya. )
Ini memungkinkan skrip untuk tetap sama ketika pekerjaan datang dan pergi di Jenkins.
Atau jika Anda memiliki beberapa repositori di bawah satu aplikasi host repositori (seperti Gitosis), Anda dapat berbagi skrip kait pasca-terima tunggal dengan semua repositori. Akhirnya, URL ini tidak memerlukan otentikasi bahkan untuk Jenkins yang diamankan, karena server tidak secara langsung menggunakan apa pun yang dikirim klien. Itu menjalankan polling untuk memverifikasi bahwa ada perubahan, sebelum benar-benar memulai membangun.
Seperti yang disebutkan di sini , pastikan untuk menggunakan alamat yang tepat untuk server Jenkins Anda:
karena kita menjalankan Jenkins sebagai Webserver mandiri pada port 8080 URL seharusnya tanpa /jenkins
, seperti ini:
http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git
Untuk memperkuat poin terakhir itu, ptha menambahkan dalam komentar :
Mungkin sudah jelas, tetapi saya memiliki masalah dengan:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>.
The url parameter harus sesuai apa yang Anda miliki di Repository URL pekerjaan Jenkins Anda.
Ketika menyalin contoh saya meninggalkan protokol, dalam kasus kami ssh://
, dan itu tidak berhasil.
Anda juga dapat menggunakan kait pasca-terima sederhana seperti di " Bangun berbasis push menggunakan Jenkins dan GIT "
#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \
http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
Konfigurasikan pekerjaan Jenkins Anda untuk dapat "Trigger builds remote" dan menggunakan token otentikasi ( 1qaz2wsx
dalam contoh ini).
Namun, ini adalah skrip khusus proyek, dan penulis menyebutkan cara untuk menggeneralisasikannya.
Solusi pertama lebih mudah karena tidak bergantung pada otentikasi atau proyek tertentu.
Saya ingin memeriksa perubahan yang ditetapkan apakah setidaknya ada satu file java yang ada harus mulai dibangun.
Misalkan pengembang hanya mengubah file XML atau file properti, maka build tidak boleh dimulai.
Pada dasarnya, skrip build Anda dapat:
- letakkan catatan 'bangun' (lihat
git notes
) pada panggilan pertama
- pada panggilan berikutnya, ambil daftar commit antara
HEAD
calon cabang Anda untuk membangun dan komit direferensikan oleh git notes
'membangun' ( git show refs/notes/build
): git diff --name-only SHA_build HEAD
.
- skrip Anda dapat menguraikan daftar itu dan memutuskan apakah perlu melanjutkan pembuatannya.
- bagaimanapun, buat / pindahkan
git notes
' build
' Anda ke HEAD
.
Mei 2016: cwhsu menunjukkan dalam komentar url yang mungkin berikut:
Anda bisa menggunakan curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN
jika Anda mengatur trigger trigger di item Anda
Juni 2016, polaretto menunjukkan dalam komentar :
Saya ingin menambahkan itu hanya dengan sedikit skrip shell Anda dapat menghindari konfigurasi url manual, terutama jika Anda memiliki banyak repositori di bawah direktori umum.
Sebagai contoh saya menggunakan ekspansi parameter ini untuk mendapatkan nama repo
repository=${PWD%/hooks};
repository=${repository##*/}
dan kemudian gunakan seperti:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository