iT邦幫忙

2026 iThome 鐵人賽

DAY 18
0
IT Operation

迎接 AI 開發爆發期:告別手動部署,帶領企業團隊從 Git 規範到 CI/CD 實戰系列 第 18

Day 18 Jenkins 程式碼化:Shared Library 建立重複使用的 Pipeline 架構

  • 分享至 

  • xImage
  •  

當團隊內的專案數量從 5 個增長到 50 個甚至更多時,如果每個專案都維護一份獨立且重複的 Jenkinsfile,將會演變成一場Operation 災難
任何掃描規則的微調或通知地址的變更,都需要修改幾十個儲存庫。本篇將介紹如何透過 Jenkins Shared Library 實現「Don't Repeat Yourself (DRY)」原則。

Shared Library 的核心理念

Shared Library 就像是 CI/CD 流程的「軟體 SDK」。我們將通用的邏輯(如 SonarQube 掃描、通知發送、Vault 密鑰調度)封裝在一個獨立的 Git 儲存庫中。專案方的 Jenkinsfile 只需要簡單地「調用」這些標準化的函數,無需關心具體的實作細節。

標準目錄結構與分工

建立一個名為 my-shared-library 的專案,其結構遵循 Jenkins 的官方規範:

my-shared-library/
├── vars/               # 存放全域變數與自定義 DSL (Domain Specific Language)
│   ├── project.groovy  # 管理專案元數據
│   └── sonarScan.groovy # 封裝掃描指令
├── src/                # 存放複雜的 Groovy 類別與邏輯 (物件導向)
│   └── com/example/Utils.groovy 
└── resources/          # 存放非 Groovy 檔案(如 SQL, JSON 模板)

關鍵技術:vars 裡的 DSL

vars/ 目錄下的每個 .groovy 檔案都會變成一個全域指令。
例如 vars/sonarScan.groovy

def call(Map config) {
    def sqScanner = tool 'SonarQube MSBuild Scanner'
    withSonarQubeEnv('SonarQube') {
        sh "${sqScanner}/SonarScanner.MSBuild.exe begin /k:\"${config.key}\""
        sh "dotnet build ${config.solution}"
        sh "${sqScanner}/SonarScanner.MSBuild.exe end"
    }
}

在 Jenkins Master 配置共享庫

  1. 進入 Manage Jenkins -> System
  2. 找到 Global Pipeline Libraries
  3. Name: common-pipeline-library (供 Pipeline 引用)。
  4. Default version: main
  5. Retrieval method: Modern SCM -> Git (指向您的 GitLab 儲存庫)。

如何在專案 Pipeline 中調用

在專案的 Jenkinsfile 最上方引入:

// '@Library' 後方的 '_' 是一個特殊的語法,代表立即載入該庫的所有全域變數
@Library('common-pipeline-library') _

pipeline {
    agent { label 'dotnet' }
    stages {
        stage('Quality Analysis') {
            steps {
                script {
                    // 直接調用 Shared Library 中的指令,不需在地端重複寫邏輯
                    sonarScan(key: 'project-portal-app', solution: 'ProjectPortal.sln')
                }
            }
        }
    }
}

實踐意義:AI 時代的架構防禦

在 AI 生成程式碼的趨勢下,專案的產出速度極快。透過 Shared Library,架構師可以快速定義一套「標準 SOP」。無論 AI 生成了多少個微服務,只要它們引用了這套 Library,就自動具備了符合公司規範的安全性檢查與部署邏輯,從源頭解決了碎片化的問題。

結語

Shared Library 是規模化 CI/CD 的基本架構。它減少了冗餘,同時也提供了一個「集中化管理」的窗口。下一步,我們將討論如何在這些共用函式中,安全地整合 HashiCorp Vault 來管理跨專案的敏感資訊。


上一篇
Day 17 SonarQube 擴充:多分支分析與 PR 裝飾實踐
下一篇
Day 19 安全無死角:Jenkins 整合 HashiCorp Vault 的密鑰管理實作
系列文
迎接 AI 開發爆發期:告別手動部署,帶領企業團隊從 Git 規範到 CI/CD 實戰19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言