การทดสอบ webhook ของ GitHub ในเครื่อง ให้คุณรับอีเวนต์ push, pull request, issue และ workflow บนเครื่องของคุณโดยไม่ต้องดีพลอยขึ้น staging รัน tunnel localhost ลงทะเบียน URL HTTPS ในตั้งค่า GitHub App หรือ repository ของคุณ แล้วดีบัก handler พร้อมการตรวจสอบลายเซ็นเต็มรูปแบบ
ทำไม webhook ของ GitHub ต้องมี endpoint สาธารณะ
GitHub ส่งอีเวนต์ webhook เป็นคำขอ HTTP POST ไปยัง URL ที่ตั้งค่าไว้ เครื่องในพื้นที่ของคุณที่ 127.0.0.1 เซิร์ฟเวอร์ของ GitHub เข้าถึงไม่ได้ tunnel localhost ให้ endpoint HTTPS สาธารณะที่ GitHub ต้องการ
GitHub Apps กับ webhook ของ repository
webhook ของ repository
ตั้งค่ารายตัวที่ Settings → Webhooks ดีสำหรับทดสอบ handler อีเวนต์ของ repo เดียวระหว่างพัฒนาฟีเจอร์
webhook ของ GitHub App
ตั้งค่าระดับแอปในตั้งค่า GitHub App จำเป็นเมื่อสร้างการเชื่อมต่อที่ให้บริการหลาย repository หรือ organization
การส่งทั้งสองแบบใช้การตรวจสอบลายเซ็น HMAC-SHA256 ผ่าน header X-Hub-Signature-256
ทีละขั้น: ทดสอบ webhook GitHub ในเครื่อง
- เริ่มแอปในเครื่องพร้อม endpoint webhook (เช่น
/api/webhooks/github) - รัน
npx portpreview 3000เพื่อรับ URL HTTPS สาธารณะ - ใน GitHub เพิ่ม URL tunnel บวก path webhook เป็น payload URL
- ตั้ง content type เป็น
application/jsonและเลือกอีเวนต์ที่จะรับ - สร้าง webhook secret และเก็บใน environment variable ในเครื่อง
- ทริกเกอร์อีเวนต์ (push commit, เปิด PR, สร้าง issue) แล้วตรวจดูการส่ง
- ยืนยันว่า handler ตรวจสอบลายเซ็นและคืน 2xx ภายใน 10 วินาที
ตรวจสอบลายเซ็น webhook GitHub ในเครื่อง
GitHub เซ็นทุก payload ด้วย webhook secret ของคุณ handler ของคุณต้อง:
- อ่าน body ดิบของคำขอก่อน parse JSON
- คำนวณ HMAC-SHA256 ด้วย secret ของคุณ
- เทียบกับ header
X-Hub-Signature-256ด้วยการเทียบเวลาคงที่
เครื่องมือ tunnel ที่รักษา header ดั้งเดิมให้คุณทดสอบเส้นทางตรวจสอบจริง อย่าข้ามการตรวจลายเซ็นระหว่างพัฒนาในเครื่อง
อีเวนต์ที่ควรทดสอบในเครื่อง
push— ลอจิกทริกเกอร์ CI, hook ป้องกัน branch, pipeline ดีพลอยpull_request— อัตโนมัติรีวิว, บอตป้ายกำกับ, เช็ก mergeissues— ซิงก์ tracker issue, เวิร์กโฟลว์มอบหมายinstallation— วงจรชีวิตติดตั้ง/ถอนติดตั้ง GitHub Appworkflow_run— อัตโนมัติหลัง CI และประมวลผล artifact
ดีบักการส่ง webhook GitHub ที่ล้มเหลว
GitHub ลองส่งซ้ำที่ล้มเหลวด้วย backoff แบบเอ็กซ์โพเนนเชียล ความล้มเหลวที่พบบ่อยในการทดสอบในเครื่อง:
- handler timeout (GitHub คาดหวังคำตอบภายใน 10 วินาที)
- ลายเซ็นไม่ตรงจากการ parse body ก่อนตรวจสอบ
- เซสชัน tunnel หมดอายุระหว่าง GitHub ลองซ้ำ
- ฟิลเตอร์อีเวนต์ผิด — handler รับอีเวนต์ที่ไม่ได้ประมวลผล
ใช้ การเล่นซ้ำ webhook เพื่อทดสอบการส่งที่ล้มเหลวซ้ำโดยไม่ต้อง push commit ใหม่
การทดสอบ webhook GitHub กับ smee.io
smee.io เป็น proxy webhook GitHub ยอดนิยมสำหรับการพัฒนาในเครื่อง ใช้ได้ดีกับการ forward พื้นฐาน แต่ขาดการตรวจสอบคำขอและการเล่นซ้ำในตัว PortPreview รวม tunneling กับการจับและเล่นซ้ำไว้ในเครื่องมือเดียว สำหรับคู่มือดีบัก webhook ที่กว้างกว่า ดู วิธีดีบัก webhook ในเครื่อง
เข้าร่วมรายชื่อรอของ PortPreview เพื่อทดสอบ webhook GitHub พร้อมการมองเห็นคำขอในตัว
