有沒有必要注意Webhook的行爲

Webhook ->  點擊訂閱Github倉庫特定事件

Introduction

  • 你在作什麼:  開發網頁,開發App
  • 你想要什麼:  關注我倉庫的一些行爲,例若有人push我代碼了怎樣
  • Webhook作什麼:  當這些行爲發生的時候咱們發一個HTTP請求過去
  • 請求? 什麼請求?  爲你的服務器設定好,收到什麼請求作什麼,那麼這個HTTP請求就能爲你作不少事,更新鏡像,觸發CI活動,本身想

你能夠選擇訂閱如下事件

  • 關於代碼自己的事件
    • Push
    • Branch/tag的建立與刪除
    • Issue產生/刪除/被評論了/被貼標籤
    • 產生了Pull requests
  • 關於代碼倉庫的事件
    • 代碼倉庫Fork
    • 代碼倉庫被Watch了
  • 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,你大能夠直接執行腳本
相關文章
相關標籤/搜索