文章目錄
遠端 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 設定
![2remourl](https://cloud.githubusercontent.com/assets/3851540/21797555/cb198e5a-d74a-11e6-96ea-c247378bf725.png)
提供一組驗證用 token
提供基本的安全防護
![3token](https://cloud.githubusercontent.com/assets/3851540/21797557/cb1b2526-d74a-11e6-80d6-7ea8fefb94c4.png)
針對 CSRF 調整
- 預設啟用 CSRF 保護
403 - No valid crumb was included in the request
解決方式有兩個
使用 API Token(建議)
1.Jenkins –> People
![10people](https://cloud.githubusercontent.com/assets/3851540/21882885/6f3d4bfa-d8e7-11e6-9b2d-8d8be4a590ad.png)
2.People –> Configure
![11someone](https://cloud.githubusercontent.com/assets/3851540/21882887/6f408130-d8e7-11e6-90ea-2ec227fe97e3.png) ![12configure](https://cloud.githubusercontent.com/assets/3851540/21882889/6f4305e0-d8e7-11e6-8b0a-6b71d57c689a.png)
3.Show API Token..
![13token](https://cloud.githubusercontent.com/assets/3851540/21882890/6f444e1e-d8e7-11e6-92a3-24289cadf32f.png) ![14token](https://cloud.githubusercontent.com/assets/3851540/21882891/6f5cb5ee-d8e7-11e6-9b12-9c0dead992c9.png)
4.使用 usern 及 API TOKEN
userid:token@JENKINS_URL/job/TestWebhook/build?token=TOKEN_NAME
5.proxy 環境下可
Enable proxy compatibility
某些 HTTP 代理伺服器會將預設 Crumb 簽發程式用來計算 Nonce 值的資訊過濾掉
如果還是無法解決問題,請考慮關閉 CSRF 保護
![22enableproxy](https://cloud.githubusercontent.com/assets/3851540/21797730/c799bd6c-d74b-11e6-928f-cc727ac20aad.png)
取消 CSRF 保護(不建議)
1.Manage Jenkins
![6manage](https://cloud.githubusercontent.com/assets/3851540/21882886/6f401aba-d8e7-11e6-9a1f-cfd951eb7fdb.png)
2.Configure Global Security
![7security](https://cloud.githubusercontent.com/assets/3851540/21882884/6f3b055c-d8e7-11e6-8c25-bd676a1db7ad.png)
3.取消
Prevent Cross Site Request Forgery exploits
![8uncsrf](https://cloud.githubusercontent.com/assets/3851540/21797562/cb3e438a-d74a-11e6-917c-fc86215fcad7.png) ![9uncsrf](https://cloud.githubusercontent.com/assets/3851540/21797561/cb3e5104-d74a-11e6-9eab-63957e76b4b7.png)
如果沒有對外 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 台灣 授權條款 釋出。