Anda boleh membuka Jenkins melalui VPN dan masih melihat GitHub melaporkan webhook yang gagal, kerana kedua-duanya ialah dua sambungan berbeza dengan dua pemilik berbeza. Pelayar menaiki terowong yang dirundingkan oleh komputer riba anda; perkhidmatan penghantaran GitHub bermula di internet awam dan tiada laluan ke rangkaian persendirian. Akses kepada repositori tidak mengubahnya, walaupun Jenkins sendiri boleh mengambil dari repositori yang sama tanpa masalah. Pilih titik masuk, geganti atau pengundian, kemudian uji laluan yang benar-benar dilalui peristiwa.

Sesi pelayar hanya membuktikan satu arah

Sambungan VPN menjawab satu soalan: bolehkah komputer riba ini sampai ke hos dalaman. Penghantaran webhook bertanya yang lain: bolehkah perkhidmatan luar membuka sambungan ke hos itu. Jenkins mengambil repositori ialah trafik keluar dan tidak berkata apa-apa tentang ketersampaian masuk. Simpan kedua-dua arah pada baris berasingan dalam rajah anda, termasuk pihak mana yang memulakan setiap satu.

Baca rekod penghantaran sebelum mengubah apa-apa. Tamat masa, set semula sambungan dan permintaan diterima yang tidak sepadan dengan mana-mana kerja mempunyai tiga pemilik berbeza: rangkaian, proksi dan konfigurasi pencetus.

Pilihan A: dedahkan titik akhir yang sempit

Jika organisasi sudah menerbitkan titik masuk yang diluluskan, dedahkan laluan webhook dan bukan papan pemuka. Biasanya ini bermakna peraturan proksi songsang yang menerima POST pada URL cangkuk dan memajukannya ke Jenkins sementara antara muka pentadbiran kekal tidak boleh dicapai dari luar.

curl -sS -o /dev/null -w "%{http_code}\n" -X POST https://jenkins.example.com/github-webhook/

Jalankan ujian itu dari rangkaian tanpa akses VPN, kerana kejayaan dari dalam terowong tidak membuktikan apa-apa. Titik akhir harus menolak permintaan tanpa rahsia dikongsi, yang dihantar GitHub sebagai pengepala tandatangan, dan hanya menerima satu laluan serta kaedah yang anda terbitkan. Konsol Jenkins awam bukan pembaikan webhook; ia insiden yang menunggu pengimbas seterusnya. Hadkan peraturan itu cukup ketat supaya seluruh aplikasi mengekalkan kawalan akses yang dimilikinya.

Pilihan B: songsangkan arah dengan geganti

Di tempat pendedahan masuk tidak akan diluluskan, klien kecil di dalam rangkaian boleh mengekalkan sambungan keluar ke geganti dan menerima peristiwa yang dimajukan. Geganti kemudian menjadi bahagian laluan penghantaran, jadi ketersediaan dan pengesahannya sama penting dengan kerja binaan.

ssh -N -R 9000:localhost:8080 relay.example.net

Panduan Jenkins tentang webhook di belakang tembok api menerangkan bentuk ini, dan ia wajar dibaca sebelum menulis pemaju sendiri. Tamatkan TLS di geganti, sahkan tandatangan sebelum peristiwa sampai ke kerja, dan pantau pautan keluar, kerana terowong yang terputus kelihatan sama seperti peristiwa yang tidak pernah dihantar. Sahkan juga bahawa geganti mengekalkan badan permintaan bait demi bait, kerana pemeriksaan tandatangan gagal pada JSON yang telah dihuraikan dan dikodkan semula di sepanjang jalan.

Pilihan C: tinjau repositori sebaliknya

Pengundian menukar kependaman dengan kesederhanaan dan tidak memerlukan laluan masuk sama sekali. Jenkins boleh mengundi mengikut jadual, atau kerja kecil boleh bertanya kepada API dan memulakan binaan apabila melihat semakan yang tidak dikenali.

curl -sS -u "$USER:$TOKEN" "https://api.github.com/repos/OWNER/REPO/commits?per_page=1"

Setiap pengundian membelanjakan panggilan API dan menambah kelewatan antara push dan binaan, yang kelihatan pada repositori sibuk dan had kadar yang dikongsi. Ia juga memerlukan kelayakan yang disimpan di mana pun pengundi berjalan, jadi hadkan token kepada akses baca sahaja ke repositori dan putarkannya seperti mana-mana rahsia lain. Pilih ini apabila jumlah peristiwa rendah atau apabila tiada titik masuk akan diluluskan, dan nyatakan dalam keterangan kerja supaya tiada sesiapa tertanya-tanya kemudian mengapa binaan ketinggalan.

Terima penghantaran sebenar, bukan pemuatan halaman

Apa pun pilihan yang anda buat, ujian penerimaan ialah peristiwa yang dihantar oleh platform sumber, bukan tab pelayar yang dibuka dari komputer riba istimewa. Tolak commit kosong ke cawangan calitan dan baca kod respons penghantaran, log geganti atau output kerja pengundian, dalam susunan itu. 200 dari titik akhir tanpa binaan bermakna penapis pencetus salah; tamat masa bermakna laluan masih tertutup. Catatkan yang mana satu daripada tiga reka bentuk sedang digunakan, kerana jika tidak orang seterusnya yang menyahpepijat akan mengulangi ujian pelayar dan sampai ke jalan buntu yang sama.

Terapkan alasan yang sama pada panggilan balik pembayaran dan pemberitahuan luar yang lain: setiap satu memerlukan laluannya sendiri ke aplikasi peribadi, walaupun setiap orang sudah memegang sesi VPN. Laluan penghantaran tergolong dalam reka bentuk aplikasi, bukan nota kaki tentang rangkaian.

Artikel berkaitan