Jenkins教程(七)實現 GitLab 提交/合並代碼觸發構建


楔子

最近公司推行統一構建平台(基於 Jenkins + Kubernetes 插件創建 slave),原來部門自建的 Jenkins 不讓用了。

遷移上統一構建平台的最大阻力是前端模塊發布的問題:

  • 前端單倉庫全量構建/發布,安裝依賴有緩存在小型機上跑着效率還行,如果遷到公司平台上性能相對低些,又沒依賴緩存,構建一次需要拉下約 15G 的依賴!
  • 迭代分支僅允許合並分支,通過 GitLab API 取不到 Merge Request 變更文件列表。

基於這個問題,研究了一下午 GitLab Plugin 官方文檔和倉庫,實現了 Jenkins 聲明式流水線 GitLab 提交/合並代碼觸發構建,記錄下來。

流程

如圖,GitLab 在開發者推送或合並代碼時觸發 webhook,向 webhook URL 發送一個 HTTP 請求(即 Jenkins 流水線配置觸發器的地址),Jenkins 流水線觸發器啟動構建與發布流程。

所以,實現需求只做以下兩件事:

  • 配置 Jenkins 流水線,添加觸發器
  • GitLab 綁定 webhook

本着快速解決問題,再夾帶擴展知識的原則,接下來我們先講如何配置,更多參數將放到最后。

配置

配置 Jenkins 流水線,添加GitLab觸發器

pipeline{
    //省略無關配置
    triggers {
        gitlab(
            triggerOnPush: true,
            triggerOnMergeRequest: false,
            triggerOpenMergeRequestOnPush: "never",
            acceptMergeRequestOnSuccess: false,
            triggerOnApprovedMergeRequest: true,
            branchFilterType: "NameBasedFilter",
            includeBranchesSpec: "develop",
            secretToken: "thisisfrontendpublish"
        )
    }
    //省略無關配置
}

以上配置參數說明:

參數名 參數說明 默認值
triggerOnPush 是否 Push 事件時觸發 true
triggerOnMergeRequest 是否 Merge Request 事件時觸發,MR 包含創建、變更、接受等很多情況 true
triggerOpenMergeRequestOnPush Merge Request 中源分支或目的分支被Push時觸發 false
acceptMergeRequestOnSuccess 構建成功時向GitLab發起接收 Merge Request 事件 false
triggerOnApprovedMergeRequest MR 被批准時觸發 true
branchFilterType 分支匹配類型:基於名稱 NameBasedFilter,基於正則表達式 RegexBasedFilter,兩者混用 ALL ALL
includeBranchesSpec branchFilterTypeNameBasedFilter生效,監聽哪些分支的事件,多分支使用英文逗號分開 ""
secretToken 類似一個密碼,用於外部調用此工程時校驗 ""

更多參數說明:

參數名 參數說明 默認值
triggerToBranchDeleteRequest 刪除分支時觸發 false
triggerOnlyIfNewCommitsPushed 僅當新提交推送時 false
triggerOnAcceptedMergeRequest acceptMergeRequestOnSuccess 類似 false
triggerOnClosedMergeRequest 關閉 Merge Request 時觸發 false
triggerOnNoteRequest 注釋觸發,根據提交時寫的注釋觸發 true
noteRegex 注釋觸發正則表達式 Jenkins please retry a build
ciSkip 允許 CI 跳過 true
skipWorkInProgressMergeRequest 跳過正在合並過程中的 Merge Request true
setBuildDescription 是否添加構建觸發原因描述 true
triggerOnPipelineEvent GitLab Pipeline 事件觸發 false
cancelPendingBuildsOnUpdate 當源碼更新時取消正在 Pending 狀態的構建,適當開啟有助於減少構建次數,畢竟大家只關心最新的構建結果 false
excludeBranchesSpec branchFilterTypeNameBasedFilter生效,指定排除哪些分支的事件 ""
sourceBranchRegex 分支匹配類型為 RegexBasedFilter 時源分支正則 ""
targetBranchRegex 分支匹配類型為 RegexBasedFilter 時目標分支正則 ""
mergeRequestLabelFilterConfig 根據標簽過濾 Merge Request 配置 非 null
includeMergeRequestLabels mergeRequestLabelFilterConfig 塊中設置包含的 Merge Request 的標簽,多個標簽以英文逗號分隔 ""
excludeMergeRequestLabels mergeRequestLabelFilterConfig 塊中設置排除的 Merge Request 的標簽,多個標簽以英文逗號分隔 ""

源碼及配置參考:

查看 Jenkins 流水線觸發器

修改完成流水線,如果是版本控制的腳本需提交再執行一下構建以更新觸發器配置。

配置 GitLab webhook

在需要添加提交/合並請求的倉庫上操作。

到這步配置完成就可以提交/合並請求測試構建是否被觸發了。

最后

文章看起來內容雖然不多,但官方給了幾個例子例子有點坑人,沒看到哪里列出來各參數的作用,最坑的是 includeBranchesSpec 這個參數官方示例是 release/qat,導致誤認為多分支需要用 / 分開。。。

寫完這篇文章還是有收獲的——清楚了很多參數的作用,如果后續用到不會太抓瞎。

本文同步發布於博客園(東北小狐狸 https://www.cnblogs.com/hellxz/)與CSDN(東北小狐狸-Hellxz https://blog.csdn.net/u012586326)禁止轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM