文章目錄
遠端 Git Repository 有變動時自動通知 Jenkins 2 進行編譯建置 (webhook)
之前筆記 如何使用 Jenkins 2.0 建置 .NET 專案 紀錄到該如何使用 Jenkins 2 來建置 .NET 專案,為了讓整個開發建置流程更加自動化也更確保品質,可以透過 Git server 所提供的 webhook 功能來 demo 該如何設定 Jenkins 2 和 Git server (將以 GitHub 為例),讓版控 (git) 可以主動通知 build server (Jenkins 2) 發動建置
文章大綱
- 設定 Jenkins 2 啟用 build trigger
- 設定 Github 啟用 webhook
- 測試
1. 設定 Jnekins 2 Build Triggers
Trigger builds remotely (e.g., from scripts)
- 需有對外的 url (讓 GitHub 通知用)
將 url 記下來,等等需要至 GitHub 設定

提供一組驗證用 token
提供基本的安全防護

針對 CSRF 調整
- 預設啟用 CSRF 保護
403 - No valid crumb was included in the request
解決方式有兩個
使用 API Token(建議)
1.Jenkins –> People

2.People –> Configure
 
3.Show API Token..
 
4.使用 usern 及 API TOKEN
userid:token@JENKINS_URL/job/TestWebhook/build?token=TOKEN_NAME
5.proxy 環境下可
Enable proxy compatibility
某些 HTTP 代理伺服器會將預設 Crumb 簽發程式用來計算 Nonce 值的資訊過濾掉
如果還是無法解決問題,請考慮關閉 CSRF 保護

取消 CSRF 保護(不建議)
1.Manage Jenkins

2.Configure Global Security

3.取消
Prevent Cross Site Request Forgery exploits
 
如果沒有對外 domain ,可以參考 使用 ngrok 讓本機上的網站可以被全世界看到
2. 以 GitHub 為例設定
Repository Setting –> Webhooks –> Add web hook
Webhook Setting
Payload URL
填
userid:token@JENKINS_URL/job/TestWebhook/build?token=TOKEN_NAME
Content type
可不用修改
Secret
可不用修改
預設使用 ssl 驗證
Webhook event
Active
重新發動 webhook
Recent Deliveries –> Redeliver
17redeliver
3. 測試
將 commit push 至 git server 上
Jenkins server 收到 git server 的 webhook
Jenkins 開始執行 build
參考資料
文章作者 Yowko Tsai
上次更新 2021-11-02
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。