Jenkins Pipeline 作為 CI/CD 工具的核心,能有效自動化軟體交付流程。本文從建立 Pipeline 工作開始,逐步說明如何撰寫 Groovy 語法的 Pipeline 指令碼,其中包含 Stage 和 Step 的定義,以及常見的 Java 版本相容性問題的解決方案。此外,文章也詳細說明瞭如何在 Pipeline 中使用字串插值,讓程式碼更簡潔易讀,並結合 Jenkins 環境變數,提升 Pipeline 的動態調整能力。最後,文章也介紹了 Pipeline Syntax 產生器,可以快速產生常用的 Pipeline 指令碼片段,例如從 Git 儲存函式庫簽出程式碼,簡化 Pipeline 的開發流程,並提供一個實際的 Pipeline 指令碼範例,方便讀者快速上手。
Jenkins Pipeline 的基礎應用
在 Jenkins 中,Pipeline 是一種強大的工具,能夠幫助我們自動化軟體開發、測試和佈署的流程。下面,我們將透過一個簡單的範例來瞭解如何使用 Jenkins Pipeline。
建立 Pipeline 工作
首先,我們需要建立一個新的 Pipeline 工作。在 Jenkins 的 dashboard 中,點選「新建工作」按鈕,然後選擇「Pipeline」作為工作型別。接下來,我們需要組態 Pipeline 的基本資訊,包括工作名稱、描述等。
編寫 Pipeline 程式碼
在 Pipeline 的編輯器中,我們可以編寫 Pipeline 程式碼。Pipeline 程式碼使用 Groovy 語言編寫,支援多種語法和函式。下面是一個簡單的 Pipeline 程式碼範例:
pipeline {
    agent any
    stages {
        stage('Hello World') {
            steps {
                echo 'Hello World'
            }
        }
    }
}
這個 Pipeline 程式碼定義了一個簡單的流程,包含一個 stage 和一個 step。stage 名為「Hello World」,step 使用 echo 函式輸出「Hello World」字串。
執行 Pipeline 工作
建立和編寫 Pipeline 程式碼後,我們可以執行 Pipeline 工作。點選「立即構建」按鈕,Jenkins 將會執行 Pipeline 工作。在 Console Output 中,我們可以看到 Pipeline 工作的執行結果。
解決 Java 版本不支援的錯誤
在執行 Pipeline 工作時,可能會遇到 Java 版本不支援的錯誤。這個錯誤通常是由於 Jenkins 不支援使用的 Java 版本引起的。解決這個錯誤的方法是,確保 PATH 系統環境變數指向支援的 Java 版本(例如 Java 11 或 Java 8)。另外,也可以在 Jenkins 的 Global Tool Configuration 中設定 JDK 11 或 JDK 1.8。
字串插值在 Jenkins Pipeline 中
Jenkins Pipeline 支援字串插值,這是一種替換變數值的過程。下面是一個簡單的範例:
def username = 'Pranoday'
echo "Hello, ${username}"
在這個範例中,我們定義了一個變數 username,然後使用 ${username} 來替換字串中的變數值。這個過程稱為字串插值。
透過這些簡單的範例,我們可以瞭解 Jenkins Pipeline 的基礎應用,包括建立和編寫 Pipeline 程式碼、執行 Pipeline 工作、解決 Java 版本不支援的錯誤和使用字串插值。這些知識將會幫助我們更好地使用 Jenkins Pipeline 自動化軟體開發、測試和佈署的流程。
字串插值的應用
在指令碼語言中,字串插值是一種強大的功能,允許您將變數嵌入字串中。例如,以下程式碼示範瞭如何使用字串插值:
Username='Pranoday'
echo "Hello Mr. ${Username}"
echo 'Hello Mr. $Username'
結果將是:
Hello Mr. Pranoday
Hello Mr. $Username
如您所見,如果字串使用雙引號括起,則需要使用 ${VariableName} 這種語法來進行字串插值。如果字串使用單引號括起,則需要使用 $VariableName 這種語法。
Jenkins 管線中的字串插值
在 Jenkins 管線中,您可以使用環境變數來存取各種有用的資訊,例如 BUILD_ID、BUILD_NUMBER、JENKINS_URL 和 JOB_NAME 等。要檢視 Jenkins 管線中可用的所有環境變數,您可以在瀏覽器中輸入以下 URL:
${YOUR_JENKINS_URL}/pipeline-syntax/globals#env
假設您的 Jenkins 主機 IP 位址和埠號為 localhost:8080,則可以使用以下 URL 來檢視所有環境變數:
http://localhost:8080/pipeline-syntax/globals#env
現在,讓我們示範如何在 Jenkins 管線中使用字串插值來印出 BUILD_ID 和 JENKINS_URL 變數。以下是範例程式碼:
pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo "Running ${env.BUILD_ID} on ${env.JENKINS_URL}"
            }
        }
    }
}
在這個範例中,我們使用 ${env.BUILD_ID} 和 ${env.JENKINS_URL} 來存取 BUILD_ID 和 JENKINS_URL 環境變數,並將其嵌入字串中。當 Jenkins 執行這個管線時,它將印出類別似以下的輸出:
Running 123 on http://localhost:8080
這就是字串插值在 Jenkins 管線中的應用。透過使用環境變數和字串插值,您可以建立更動態和更有用的 Jenkins 管線。
瞭解Jenkins Pipeline
在前面的章節中,您已經建立了一個自由式工作,以發布CalculatorAPI JAR到Nexus Repository。現在,您將學習如何建立一個pipeline工作,以執行相同的任務,發布新的CalculatorAPI.jar版本到Nexus repository。
建立Pipeline工作
- 前往Jenkins控制台。
- 建立一個新的pipeline工作。點選「新建專案」連結。
- 命名工作並選擇「Pipeline」選項。
- 點選「確定」按鈕。
- 向下滾動到找到「Pipeline」部分。
組態Pipeline
- 點選「Scripted Pipeline」選項,以生成基本的pipeline指令碼範本。
- 刪除範本中的程式碼,並撰寫自己的pipeline指令碼。
- 使用Pipeline Syntax:Snippet Generator工具來生成pipeline指令碼。點選程式碼編輯器下方的「Pipeline Syntax」連結,以開啟Snippet Generator。
使用Snippet Generator
- 點選「Sample Step」下拉選單,選擇「Git」步驟,以從GitLab repository中簽出master分支。
- 填入Git repository的詳細資訊,包括repository URL、分支名稱和憑證。
- 點選「Generate Pipeline Script」按鈕,以生成pipeline指令碼陳述式。
- 複製生成的陳述式,並傳回pipeline工作中進行修改。
修改Pipeline指令碼
- 刪除不需要的程式碼,並新增「Stage:簽出程式碼」階段。
- 將Git步驟貼入該階段中,並新增註解以描述該階段的作用。
- 使用雙斜線(//)新增註解,描述pipeline的作用。
Pipeline指令碼範例
pipeline {
    agent any
    stages {
        stage('簽出程式碼') {
            steps {
                git branch: 'master', 
                     credentialsId: 'MyGitSSHCredentials', 
                     url: 'https://gitlab.com/your-repo.git'
                // 簽出master分支的程式碼
            }
        }
    }
}
從技術架構視角來看,Jenkins Pipeline 以其靈活的 Groovy 指令碼和階段式設計,為 CI/CD 流程提供了強大的自動化能力。本文展示了從簡單的 “Hello World” 到與 Git 整合的程式碼範例,逐步揭示 Pipeline 的核心功能。然而,Pipeline 的學習曲線較陡峭,Groovy 語法和 Jenkins 特定語法需要一定的學習成本。此外,Pipeline 的除錯和維護也可能比傳統的自由式工作更為複雜,需要開發者具備一定的指令碼編寫和問題排解能力。
儘管存在這些挑戰,Pipeline 的優勢依然顯著。它能將整個 CI/CD 流程式碼化,提高流程的可重複性和可追溯性。同時,Pipeline 的階段式設計也提升了流程的視覺化和可控性,方便團隊成員協同工作。對於追求高度自動化和靈活性的團隊而言,投入精力學習和掌握 Jenkins Pipeline 將帶來長期的效益。玄貓認為,Pipeline 代表了 CI/CD 的未來方向,值得技術團隊積極探索和應用。對於資源有限的團隊,建議先從簡單的 Pipeline 開始,逐步累積經驗,再逐步擴充套件到更複雜的應用場景,以最大化 Pipeline 的價值。
 
            