2017-02-10

遠端 Git Repository 有 merge 時自動通知 Jenkins 2 進行編譯建置 (webhook)

之前文章 如何使用 Jenkins 2.0 建置 .NET 專案 介紹該如何使用 Jenkins 2 來建置 .NET 專案,為了讓整個開發建置流程更加自動化也更確保品質,可以透過 Git server 所提供的 webhook 功能來 demo 該如何設定 Jenkins 2 和 Git server (將以 GitHub 為例),讓版控 (git) 可以主動通知 build server (Jenkins 2) 發動建置


文章大綱

  1. 設定 Jenkins 2 啟用 build trigger
  2. 設定 Github 啟用 webhook
  3. 測試

1. 設定 Jnekins 2 Build Triggers

  • Trigger builds remotely (e.g., from scripts)

    1url

    • 需有對外的 url (讓 GitHub 通知用)
      • 將 url 記下來,等等需要至 GitHub 設定

        2remourl

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

        3token

  • 針對 CSRF 調整

    • 預設啟用 CSRF 保護
    • 403 - No valid crumb was included in the request

      5CSrF

    • 解決方式有兩個
      • 使用 API Token(建議)
        • 1.Jenkins --> People

          10people

        • 2.People --> Configure

          11someone

          12configure

        • 3.Show API Token..

          13token

          14token

        • 4.使用 usern 及 API TOKEN

          • userid:token@JENKINS_URL/job/TestWebhook/build?token=TOKEN_NAME
        • 5.proxy 環境下可 Enable proxy compatibility

          • 某些 HTTP 代理伺服器會將預設 Crumb 簽發程式用來計算 Nonce 值的資訊過濾掉
          • 如果還是無法解決問題,請考慮關閉 CSRF 保護

            22enableproxy

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

          6manage

        • 2.Configure Global Security

          7security

        • 3.取消 Prevent Cross Site Request Forgery exploits

          8uncsrf

          9uncsrf

如果沒有對外 domain ,可以參考 使用 ngrok 讓本機上的網站可以被全世界看到

2. 以 GitHub 為例設定

  • Repository Setting --> Webhooks --> Add web hook

    4addwebhook

  • Webhook Setting

    15hooksetting

    • Payload URL

      userid:token@JENKINS_URL/job/TestWebhook/build?token=TOKEN_NAME

    • Content type

      可不用修改

    • Secret

      可不用修改

    • 預設使用 ssl 驗證
    • Webhook event
    • Active
  • 重新發動 webhook
    • Recent Deliveries --> Redeliver

      16delivery

    • 17redeliver

      17redeliver

3. 測試

  1. push

    18push

  2. received

    19received

  3. build

    20build

    21success

參考資料

  1. About Webhooks
  2. GitHub Developer - Webhooks
  3. 如何使用 Jenkins 2.0 建置 .NET 專案
  4. 使用 ngrok 讓本機上的網站可以被全世界看到

沒有留言:

張貼留言