Kiểm thử webhook GitHub cục bộ cho phép bạn nhận sự kiện push, pull request, issue và workflow trên máy mình mà không cần deploy lên staging. Chạy một tunnel localhost, đăng ký URL HTTPS trong cài đặt GitHub App hoặc repository của bạn, rồi gỡ lỗi handler với xác minh chữ ký đầy đủ.
Vì sao webhook GitHub cần một endpoint công khai
GitHub gửi sự kiện webhook dưới dạng yêu cầu HTTP POST tới một URL đã cấu hình. Máy cục bộ của bạn tại 127.0.0.1 không thể tiếp cận từ máy chủ của GitHub. Một tunnel localhost cung cấp endpoint HTTPS công khai mà GitHub yêu cầu.
GitHub Apps vs webhook repository
Webhook repository
Cấu hình theo từng repository tại Settings → Webhooks. Tốt để kiểm thử handler sự kiện của một repo trong lúc phát triển tính năng.
Webhook GitHub App
Cấu hình ở cấp app trong cài đặt GitHub App của bạn. Cần thiết khi xây tích hợp phục vụ nhiều repository hoặc organization.
Cả hai kiểu gửi đều dùng xác minh chữ ký HMAC-SHA256 qua header X-Hub-Signature-256.
Từng bước: kiểm thử webhook GitHub cục bộ
- Khởi động app cục bộ với một endpoint webhook (ví dụ
/api/webhooks/github). - Chạy
npx portpreview 3000để có URL HTTPS công khai. - Trong GitHub, thêm URL tunnel cộng đường dẫn webhook làm payload URL.
- Đặt content type là
application/jsonvà chọn sự kiện cần nhận. - Tạo một webhook secret và lưu vào biến môi trường cục bộ.
- Kích hoạt sự kiện (push một commit, mở PR, tạo issue) và kiểm tra các lần gửi.
- Xác minh handler kiểm tra chữ ký và trả về phản hồi 2xx trong vòng 10 giây.
Xác minh chữ ký webhook GitHub cục bộ
GitHub ký mỗi payload bằng webhook secret của bạn. Handler của bạn phải:
- Đọc body thô của yêu cầu trước khi phân tích JSON.
- Tính HMAC-SHA256 bằng secret của bạn.
- So sánh với header
X-Hub-Signature-256bằng so sánh thời gian hằng số.
Các công cụ tunnel giữ nguyên header gốc cho phép bạn kiểm thử đường xác minh thật. Đừng bao giờ bỏ qua kiểm tra chữ ký khi phát triển cục bộ.
Các sự kiện nên kiểm thử cục bộ
push— logic kích hoạt CI, hook bảo vệ nhánh, pipeline triển khai.pull_request— tự động hóa review, bot nhãn, kiểm tra merge.issues— đồng bộ tracker issue, luồng phân công.installation— vòng đời cài/gỡ GitHub App.workflow_run— tự động hóa sau CI và xử lý artifact.
Gỡ lỗi các lần gửi webhook GitHub thất bại
GitHub thử lại các lần gửi thất bại với backoff lũy thừa. Lỗi thường gặp khi kiểm thử cục bộ:
- Handler timeout (GitHub mong phản hồi trong 10 giây).
- Chữ ký không khớp do phân tích body trước khi xác minh.
- Phiên tunnel hết hạn trong lúc GitHub thử lại.
- Bộ lọc sự kiện sai — handler nhận sự kiện nó không xử lý.
Dùng phát lại webhook để kiểm thử lại các lần gửi thất bại mà không cần push commit mới.
Kiểm thử webhook GitHub vs smee.io
smee.io là một proxy webhook GitHub phổ biến cho phát triển cục bộ. Nó hoạt động tốt cho việc chuyển tiếp cơ bản nhưng thiếu kiểm tra yêu cầu và phát lại tích hợp sẵn. PortPreview kết hợp tunnel với bắt và phát lại trong một công cụ. Để có hướng dẫn gỡ lỗi webhook rộng hơn, xem cách gỡ lỗi webhook cục bộ.
Tham gia danh sách chờ của PortPreview để kiểm thử webhook GitHub với khả năng thấy yêu cầu tích hợp sẵn.
