Webhook到底是個啥?

2021-09-11 10:50:43 字數 3993 閱讀 2057

伺服器:jenkins servergit serverngrokgithub webhook

在配置jenkins實現前端自動化構建的過程中,對於自動化的過程理解很模糊,只是知道jenkins伺服器,git倉庫和後端應用伺服器這三個概念。

答案就是:git webhook機制發出請求,告知jenkins伺服器你要自動構建了。

webhook與非同步程式設計中"訂閱-發布模型"非常類似,一端觸發事件,一端監聽執行。

如果僅僅想學習webhook,可以直接閱讀。但是一定要注意,知識點是"非同步程式設計模型",webhook僅僅是它的乙個實現。

開啟正文!

以github webhook,koa,ngrok學習webhook。

維基百科:

**當事件發生時,源**可以發起乙個http請求到webhook配置的url。**配置之後,使用者可以通過在乙個站點觸發事件,之後再呼叫另乙個站點的行為。可以是任何操作。

普通使用者可以使用ci系統或者通知bug追蹤系統觸發build。

由於webhook使用http協議,因此可以直接被整合到web service。所以他們有時會被用來構建訊息佇列服務,例如一些restful的例子:ironmq和restms。

以github webhook為例,學習webhook。

webhook 允許我們通過在github.com訂閱事件後構建後或者安裝github應用。當其中之一的事件被觸發時,我們可以傳送http post請求到webhook的配置url。**webhook可以用作公升級乙個issue追蹤,觸發ci構建,公升級乙個後端映象,或者甚至是部署你的生產伺服器。**只有想不到,沒有做不到。

事件在配置webhook的時候,你可以選擇自己想要接收的事件。你甚至可以選擇參加觸發所有事件。只有訂閱特殊的需要的事件,可以有效限**務器http請求數。可以通過api或者ur隨時訂閱事件。預設情況下,webhook只訂閱push事件。

每個事件與乙個動作集合聯絡,這些動作可以在你的組織或者repo中發生。例如,如果你訂閱了issues事件,你將在issue open,close以及labeled時接收到detailed payload。

下面是一些可用的事件:

name

description

*any time any event is triggered (wildcard event).

check_run

any time a check run is created, requested, or rerequested.

check_suite

any time a check suite is completed, requested, or rerequested.

commit_comment

any time a commit is commented on.

push

any git push to a repository, including editing tags or branches. commits via api actions that update references are also counted. this is the default event.

載荷每乙個事件型別都有乙個指定的與相關事件資訊有關的payload格式。所有的事件載荷都是事件型別的載荷映象,push除外,因為他有更加詳細的webhook負載。

傳送報文頭

傳送到webhook配置url的http post負載會包含幾個指定的報文頭。

header

description

x-github-event觸發分發的事件型別。

x-github-delivery唯一識別分發的guid。

x-hub-signaturehmac十六進製制的響應體。如果secret配置了,這個頭資訊將被傳送。hmac十六進製制由sha1雜湊演算法生成,secret作為hmac的key。

user-agent也將會加上字首github-hookshot/. 示例:

}複製**ping 事件 ping事件負載

| key | value |

| --- | --- |

| zen | random string of github zen |

| hook_id | the id of the webhook that triggered the ping |

| hook | the [webhook configuration]( |

複製**

}複製**

1. 配置並建立webhook

content型別

secret

events

2. 配置接收和管理負載的伺服器

./ngrok http 4567

複製**

將生成的只有8小時有效時間的url複製到payload url。

複製**

var koa = require('koa');

var router = require('koa-router');

var router = new router();

router

.post('/payload', (ctx, next) => )

.use(router.routes())

.use(router.allowedmethods());

複製**

執行以下命令啟動服務:

node server.js

複製**

},

response: },

originalurl: '/payload',

req: '',

res: '',

socket: '' }

複製**

3.測試webhooks

在每乙個webhook下都有乙個觸發事件記錄列表。

單擊後會展開webhook的請求和響應。

4.在github和server設定token核心知識點是什麼? "發布-訂閱" 事件非同步程式設計模型,要注意這個模型是只針對git repo自身的,它訂閱了來自local的push事件,觸發者則是某乙個開發者的git push操作。

如果還是不懂,建議先閱讀樸靈大神的《深入淺出nodejs》的非同步章節,並且涉獵大量的非前端技術,並實踐。

不過對於這篇博文來說,webhook是git的一種機制,可用於前端自動化構建是關鍵知識點。

當然,關於這篇博文,其實有些流程還不是很清晰,文章內容可能在我做完一次完整的jenkins自動化構建實驗後更新。

參考:that it !

elemtype到底是個啥?

以前對這個東西的一知半解,今天有時間,查了多方面的資料,總結下 elemtype簡單來說就是 用來更好的替代,他也可以叫做別的名字,比如說 define elemtype int 寫程式,就可以用elemtype來進行替代int,若以後想要改elemtype所定義的資料型別為char,直接 defi...

generator yield到底是個啥

先來乙個函式 function show let gen show gen.next 12 gen.next 5 通過函式我們可以看到,定義a接收了yield傳進來的引數,現在請大家和我玩個遊戲,猜猜看a是幾 好了,不賣關子了,咱們執一下看看 那麼現在反過來就有乙個問題了,可能有些人會說,等會,我有...

構造方法到底是個啥?

來來來,搞這個構造方法之前我們來看看啥是方法,方法就是一些語句湊在一塊實現一些功能的集合,方法通常由兩部分組成 引數和返回值。引數是進入方法裡面的資料,通過方法體裡面的語句執行啊執行,哎!出來乙個產物也就是乙個返回值。格式參照 修飾符 返回值型別 方法名 引數型別 引數名,我們知道,方法裡面可以有引...