Webhook -> 點擊訂閱Github倉庫特定事件
Introduction
- 你在作什麼: 開發網頁,開發App
- 你想要什麼: 關注我倉庫的一些行爲,例若有人push我代碼了怎樣
- Webhook作什麼: 當這些行爲發生的時候咱們發一個HTTP請求過去
- 請求? 什麼請求? 爲你的服務器設定好,收到什麼請求作什麼,那麼這個HTTP請求就能爲你作不少事,更新鏡像,觸發CI活動,本身想
你能夠選擇訂閱如下事件
- 關於代碼自己的事件
- Push
- Branch/tag的建立與刪除
- Issue產生/刪除/被評論了/被貼標籤
- 產生了Pull requests
- 關於代碼倉庫的事件
- Deployment
- 完成部署
- 建立/刪除 Deployment Keys
- 部署狀態發生改變
- 更多
用戶訂閱Webhook會產生什麼影響
1. 在Github頁面上定義一個Webhook
Jenkins-Git
插件執行的操做
- git rev-parse --is-inside-worktree 檢查咱們如今是否是在一個有效的工做目錄下
- git config remote.origin.url http.... 配置倉庫地址
- git fetch 獲取全部tag/分支相關信息
- git rev-parse ..^{commit} 得到頭部hash(最新提交ID)
- git checkout 切換到最新提交ID上
- 能夠發現Webhook並不支持,也就是說fetch的時候並不會觸發一個Webhook
- 就算觸發了,也就是 Github -- HTTP --> 某URL
- 這裏的全部執行過程並不涉及編譯機自己
比Webhook更加普遍 -> Hooks
1.1 Hooks的分類
Hook一樣它們也能針對特定行爲作出反應,只是這裏的反應不僅是發送URL請求,而是執行一個腳本,Webhook的行爲一樣能夠被hook原模原樣的表演出來,Hook能分紅兩種,他們都會位於.git/hooks目錄下
- 本地 -> 本地倉庫 -> .git/hooks 上定義
- 你在本地執行完相應的操做之後,本地爲你執行的腳本
- 這裏的hook包含有 Patch類 + commit類 + push類 ,基本上都是針對代碼修改後提交可能須要的hook,沒有一個是關於 fetch 相關的hook
- Git服務端 -> 遠程倉庫 -> .git/hooks 上定義
- 服務端可能會接受到一些請求,例如你commit了或者push了,服務端去執行的腳本
- 這二者是互相不關聯的,也就是說:
- 修改了本地的 .git/hooks/XXX後,下一次push不會提交,遠程不知道,只能本地用
- 修改了服務器上的 .git/hooks/XXX後,下一次clone不會同步到本地
1.2 因此爲何Webhook & Hook是安全的
- 假設如今有一我的但願在編譯機Fetch的時候,觸發一些什麼操做,他須要解決這些問題
- 你須要有一個你本身的Git客戶端,不然你修改不了遠程 .git目錄
- 沒有針對Fetch的 Webhook & Hook,根據這個stack overflow回答
- 你沒有可能創造出一個Fetch-Hook
- Merge卻是可能觸發一個本地Hook,可是Hook是沒法被下載下來的,因此你必須在第一次編譯的時候下載並人爲創造一個Merge-Hook, 第二次編譯人爲觸發Merge-Hook
- 惋惜咱們每次都清空你的代碼,你的Merge-Hook留不到下一次
- Hook本質是執行腳本,若是你都能建立出Hook,你大能夠直接執行腳本