基於Gitlab鉤子提交合並代碼觸發jenkins構建

原文:https://www.fxkjnj.com/3801/

背景需求:

  最近公司在搞流水線集成,gitlab 和 jenkins 的自動構建的任務自然落在了我們運維的頭上,之前發佈開發和測試環境都是辛苦由我們的測試大大手動點的,公司項目越來越多,發現每次手動點,效率不高。本文基於gitlab的鉤子自動觸發jenkins構建,已達到自動發佈的目的【僅用於開發和測試環境】

環境:

  • Jenkins 2.303.2
  • GitLab Enterprise Edition 11.10.4-ee
  • jenkins 插件 Generic Webhook Trigger Plugin

先說下坑 [某一博主發現的,後來實驗驗證是符合的]

2022.01.21更新:去除GitLab webhook的合併請求事件及移除gitlab插件觸發器無效合併請求配置。原因是合併請求創建時會誤觸發。實驗發現合併請求審批者同意合併時發起的是push請求,去除後不影響需要。

image-20220417220919075

工作流程

image-20220417222916730

  如圖,GitLab 在開發者推送或合併代碼到 指定分支,觸發 webhook,向 webhook URL 發送一個 HTTP 請求(即 Jenkins 流水線配置觸發器的地址),Jenkins 獲得構建任務,判斷 構建任務分支是否爲指定分支,流水線觸發器啓動構建並自動化發佈

需要配置如下內容

  • jenkins 安裝Generic Webhook Trigger Plugin 插件
  • jenkins 配置流水線【自由風格 and pipeline 流水線】
  • Gitlab 配置項目集成鉤子,並綁定 webhook

步驟一:安裝jenkins Generic Webhook Trigger Plugin 插件

image-20220417223526936

步驟二: 配置流水線 【自由風格 項目類型】

  • Build when a change is pushed to GitLab. GitLab webhook URL: XXXXXXXXXXXX , 記住這個URL地址,等會配置gitlab 鉤子需要使用到
  • 勾選:Push Events
  • 勾選:Comments
  • 點擊,高級
  • 勾選: Set build description to build cause (eg. Merge request or Git Push )
  • 配置,指定分支 ,我這裏配置的是release 分支
  • 點擊Generate 生成一個 Secret token, 記住這個Token地址,等會配置gitlab 鉤子需要使用到
  • 保存,save

image-20220417223838718

image-20220417224149324

步驟三: Gitlab 配置項目集成鉤子,並綁定 webhook

  • 代碼倉庫,設置,集成
  • URL,把剛剛jenkins 上的webhook URL 貼到這裏
  • Secret Token,把剛剛jenkins 上的Secret token 貼到這裏
  • 勾選,Push events
  • 勾選,Enable SSL verification
  • Add webhook

image-20220417224528709

image-20220417224719631

步驟四: 測試下wehhook

還在剛剛配置gitlab 的集成配置頁面,找到webhook 列表,點擊 下拉選項裏的 Push events

image-20220417225013278

可以看到,jenkins 已經自動獲取到webhook 的通知請求,並開始了構建

image-20220417225348732

步驟五: 配置流水線 【pipeline 項目類型】

上面演示的流水線是基於自由風格類型去配置的,其實很多時候我們的job都是pipeline 流水線類型,這個就需要手動的寫pipeline

  • triggerOnPush ,開啓Push Events 事件
  • triggerOnMergeRequest ,關閉MergeRequest ;是否 Merge Request 事件時觸發,MR 包含創建、變更、接受等很多情況
  • ciSkip,關閉 ci,允許 CI 跳過
  • branchFilterType 和 includeBranchesSpec 是一個關聯,branchFilterType 爲 NameBasedFilter生效,監聽哪些分支的事件,多分支使用英文逗號分開
pipeline{


//Gitlab-webhook
    triggers {
        gitlab(
            triggerOnPush: true,
            triggerOnMergeRequest: false,
            ciSkip: false,
            branchFilterType: "NameBasedFilter",
            includeBranchesSpec: "release",
            secretToken: "XXXXXXXXXX"
        )
    }

修改完成流水線,需要執行一下構建以更新觸發器配置,也就是渲染出觸發器的配置

最後:

  剛開始做的時候,根據網上提供的幾篇文章去測試,都發現一個問題,當開發者提交合並代碼的請求時,管理員還沒同意merge,gitlab webhook 就去通知jenkins 執行構建任務,管理員同意merge 後,jenkins 卻沒有收到任務構建任務。

  後來發現 合併請求審批者同意合併時發起的是push請求,總以爲是merge請求,所以只需要在 jenkins 的job 裏 ,只勾選Push Events 【不能勾選Opened Merge Request Events,Accepted Merge Request Events】; gitlab 的webhook 設置裏 只設置 推送 Push events

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章