2017-09-10 31 views
1

我們的產品在GitHub上創建WebHooks。每個客戶項目一個。GitHub WebHooks觸發全局而不是每個分支

每個這樣的項目都鏈接到一個分支。

當執行push到GitHub時,會觸發相應的WebHook,它反過來向我們端點執行某個操作。

一種常見的情況是客戶將有多個項目連接到同一個存儲庫的多個不同分支。因此,幾個不同的WebHooks連接到同一個存儲庫。

問題是,當push執行到其中一個分支時,GitHub觸發所有與存儲庫相關的WebHooks。

我們期望當對某個分支進行推送時,只會觸發一個對應的WebHook。

我發現了兩個職位(其中一個是從2012年開始),這似乎是指這個問題:

一個可能的解決方案是解析ref參數發送到webhook請求中,並控制何時相應採取行動(尚未檢查該方向,並且希望ref確實始終存在並保存正確的分支路徑/名稱)。但是,這將是「太晚了」 - 因爲所有WebHooks將被觸發,然後...

但似乎不合理,GitHub不會有辦法配置此行爲以某種方式。

幫助將不勝感激。

+0

解析推送事件的單個webhook並按分支過濾。或者,您可以爲每個客戶項目分配每個回購單獨分開的WebHooks。 – osowskit

回答

2

我已經伸出GitHub支持。

我希望這篇文章能夠幫助那些誤解WebHooks和版本庫/分支之間關係的人。

這裏是他們的回答:

您觀察到的行爲預期,也沒有計劃改變 它在不久的將來。

當您創建一個存儲庫中的網絡掛接,並訂閱推送 事件 - 當任何分支或標籤被推向了網絡掛接將觸發, 作爲記錄在這裏:

https://developer.github.com/v3/activity/events/types/#pushevent

有沒有每個分支的webhooks。

所以,而不是創建訂閱對同一存儲庫中的推送事件 多個網絡掛接,您應該只創建一個,並檢查哪個 分行收到您的有效載荷推到(因爲你注意到沒有,的 名該分支通過有效載荷中的ref域傳遞)。

這個答案讓我們意識到我們的觀念是錯誤的。

分支沒有映射到webhooks。 每個網絡掛接連接到存儲庫,並在提交到分支而成,該分公司表示網絡掛接web請求內ref屬性裏面,像這樣:

{ 
    "ref": "refs/heads/branch_name", 
    ... 

另一個要注意的是,GitHub上限制每個存儲庫的事件來創建網絡掛接的數量:您可以創建多達20個網絡掛接對每個安裝 目標(特定組織或特定庫)每個事件

這是採取從這裏:

https://developer.github.com/webhooks/

這就是在這種情況下重要的是,可以從每個分支網絡掛接的創建爲push事件,更讓我們達到20個網絡掛接這個限制,從而嘗試創建其他WebHook時會導致錯誤。

將它保存在每個存儲庫的一個WebHook中可以消除這個問題。

相關問題