以最简单的方式解释管道即代码

在軟體開發過程中,持續整合/持續交付(CI/CD)管道扮演著至關重要的角色,它能夠自動化程式碼的建置和部署至不同環境的流程。

然而,建立和維護這類管道本身可能是一項複雜且具挑戰性的任務。這時,「管道即程式碼」(Pipeline as Code)的概念便應運而生。它提供了一種以程式碼形式建立整個 CI/CD 管道的方法。開發者不再需要依賴網頁介面和拖曳工具,而是透過設定檔來定義應用程式程式碼的建置、測試和部署方式。

在深入探討「管道即程式碼」及其建構方式之前,讓我們先了解什麼是軟體開發中的管道。

軟體開發中的管道是什麼?

軟體開發中的管道是指一系列自動化的步驟,這些步驟負責獲取最新的程式碼變更,執行特定的流程,並將其部署到您選擇的環境中。讓我們透過一個範例來更深入理解這個概念。

假設您有三個微服務,並且您對其中一個服務新增了一項新功能。現在,您需要執行程式碼級的單元測試。測試通過後,您還需要檢查程式碼的格式問題。接著,您將建置程式碼。建置完成後,您希望將其部署到兩個不同的環境,每個環境都有多台機器。最後,您需要執行整合測試,以確保您的變更與其他服務同步。

您可以選擇手動執行以上所有步驟,但這會耗費您大量的時間,並且容易出錯。那麼,有沒有方法可以自動化這些步驟呢?答案是肯定的!您可以建立管道並定義所有步驟。之後,每次程式碼發生變更時,您只需觸發管道即可,無需擔心任何手動步驟。

「管道即程式碼」的優點

如果使用拖放等工具來定義管道,那麼您將難以追蹤變更、維護標準化或促進協作。「管道即程式碼」提供了一個更好的方法來定義軟體開發管道。

它有助於保持流程的一致性。透過促進自動化,您可以實現流程的可重複性,並將相同的管道應用於其他系統。就像應用程式程式碼一樣,用於定義管道的程式碼也可以促進團隊協作。

#1. 一致性

以文字格式定義管道確保不會出現任何意外的混亂情況。透過對所有應用程式建置和部署實施標準化工作流程,您可以確保一致性,並降低發生不可預期問題的風險。

透過一致性,您還可以提升合規性檢查和安全性。確保管道的一致性允許您定義安全掃描和漏洞檢查,避免遺漏任何問題。

#2. 可重複性

建立您的管道並設定自動化流程。除了確保一致性之外,您的自動化管道還能確保每個應用程式程式碼都經歷相同的階段和檢查。

每次執行管道時,您的程式碼都將經歷相同的建置和部署過程。您可以在所有執行中保持流程的可重複性。

#3。 協作

透過程式碼作為建立管道的媒介,您可以促進協作。團隊中的多位成員可以共同貢獻於相同的程式碼,就像他們對應用程式程式碼所做的那樣。

「管道即程式碼」還允許您維護版本控制,並進行程式碼審查。這有助於確保遵循最佳實踐,並及早發現潛在的問題。

現在,讓我們深入了解如何使用「管道即程式碼」建立您自己的管道。

在 Jenkins 中使用「管道即程式碼」

在持續整合和持續部署 (CI/CD) 系統中,Jenkins 是一款領先的開源自動化伺服器。藉助 Jenkins,您可以輕鬆整合程式碼變更、自動化測試和建置,以及部署軟體。您可以可靠且高效地完成所有這些工作。

無論您是想深入了解自動化管道的愛好者,還是正在建構複雜的企業系統,Jenkins 都能滿足您專案的所有獨特需求。其豐富的插件和不斷成長的社群可以幫助您充分利用自動化。

在 Jenkins 中,管道是一組按照特定順序定義的各種不同插件,用於建立 CI/CD 系統。無論是簡單還是複雜的用例,您都可以使用程式碼來建立管道,並使用管道特定領域語言 (DSL) 語法。DSL 建構於 Apache Groovy 之上。

Jenkins 中「管道即程式碼」的基礎是 Jenkinsfile,這是一個包含描述所有不同階段和操作程式碼的文字檔案。接下來,讓我們學習如何使用 Jenkinsfile 建立「管道即程式碼」。

如何建立「管道即程式碼」?

安裝並啟動 Jenkins 後,請導覽至瀏覽器上的網頁介面。您可能需要登入。接著,您將進入主儀表板頁面。您將從這裡開始並建立您的管道。

  • 在左側面板上,您會找到一個「建立新專案」按鈕。
  • 點擊它即可導覽至下一頁。
  • 進入新頁面後,您會看到建立專案的提示。
  • 在「輸入專案名稱」欄位中輸入名稱。這是必填的。
  • 請記住,將會以相同的名稱建立一個目錄。因此,最好避免使用空格,因為這可能會導致不必要的副作用。
  • 接著,選擇「管道」選項,然後點擊畫面底部的「確定」按鈕。
  • 隨後將顯示「組態」視窗。
  • 點擊左側面板中的「管道」選項或向下捲動至「管道」區段。

讓我們從一個可以直接在介面中組態的簡單管道開始。

直接在 Jenkins 中建立「管道即程式碼」

進入「管道」區段後,您便可以開始建立您的第一個「管道即程式碼」。

從「定義」下拉選單中,選擇「管道指令碼」選項。在其下方,您會找到一個指令碼區域,您可以在其中編寫管道的程式碼。Jenkins 會維護在此處建立的指令碼。

Jenkins 允許您在兩種程式碼風格或語法之間進行選擇:宣告式語法和指令碼式語法。雖然宣告式語法易於使用,非常適合簡單的管道,但指令碼式語法更適合進階使用者和設計複雜的流程。

使用宣告式語法,使用以下程式碼片段建立三個簡單的階段:建置程式碼、測試程式碼和部署程式碼:

pipeline {
    agent any

    stages {
        stage('Build Code') {
            steps {
                echo 'This is the step for build...'
            }
        }
        stage('Test Code') {
            steps {
                echo 'This is the step to test...'
            }
        }
        stage('Deploy Code') {
            steps {
                echo 'This step deploys the code...'
            }
        }
    }
}

您也可以使用指令碼式語法,如下所示:

node {
    stage('Build Code') {
        echo 'This is the step for build...'
    }
    stage('Test Code') {
        echo 'This is the step to test...'
    }
    stage('Deploy Code') {
        echo 'This step deploys the code...'
    }
}

點擊「儲存」。現在,點擊左側面板中的「立即建置」按鈕。這將觸發您剛建立的管道。

管道完成後,您可以在建置歷史記錄中檢查它。如果這是您第一次執行,請點擊目前的版本編號 #1。接著,點擊左側面板中的「主控台輸出」。您會在每個階段的管道程式碼中找到三個 echo 陳述式。

使用外部檔案建立「管道即程式碼」

當管道開始變得複雜時,直接在 Jenkins 中維護管道將變得具挑戰性。在這種情況下,您需要建立一個外部檔案並使用它。

在建立 Jenkins 管道之前,您需要一個外部儲存庫和版本控制系統。讓我們建立一個 Git 儲存庫,並將其遠端託管在 GitHub 上。您將在此處建立 Jenkinsfile 並儲存它。

  • 前往您的 GitHub 個人資料。如果您沒有帳號,您可以建立一個免費帳號。
  • 建立一個新的儲存庫。將其命名為 customJenkins。
  • 在您的本機電腦上,確保已安裝 Git。
  • 在您選擇的位置建立一個目錄。
  • 導覽至該目錄並開啟終端機。
  • 使用 `git init` 命令初始化一個空的 Git 儲存庫。
  • 現在,建立一個新檔案,這將是您的 Jenkinsfile。我們將其命名為 `customJenkinsfile`。
  • 將您的管道程式碼寫入此檔案中。例如,使用以下程式碼:
pipeline {
    agent any

    stages {
        stage('Build Code') {
            steps {
                echo 'This is the step for build defined in custom file...'
            }
        }
        stage('Test Code') {
            steps {
                echo 'This is the step to test defined in custom file...'
            }
        }
        stage('Deploy Code') {
            steps {
                echo 'This step defined in custom file deploys the code...'
            }
        }
    }
}
  • 在終端機中使用 `git add –all` 命令將新建立的檔案新增至 Git。
  • 使用 `git commit -m “Created a custom jenkinsfile”` 命令將檔案提交至 Git。
  • 使用 `git remote add origin` 將本機 Git 儲存庫連結至遠端儲存庫 [email protected]:<您的使用者名稱>/customJenkins.git。
  • 接著,使用 `git push –set-upstream origin master` 將檔案上傳至遠端 (GitHub)。

您現在已在 GitHub 上建立了一個包含自訂 Jenkinsfile 的遠端儲存庫。接下來,讓我們組態 Jenkins 以使用它。

組態 Jenkins 以使用 GitHub 上的 Jenkinsfile

  • 開啟 Jenkins 儀表板。
  • 建立一個新的管道,或從現有的管道點擊左側面板中的「組態」。
  • 向下捲動至「管道」區段。
  • 從「定義」下拉式選單中,選擇「來自 SCM 的管道指令碼」選項。
  • 在 SCM 選項中選擇 Git。
  • 在「儲存庫 URL」下方提供您的 GitHub 儲存庫連結。
  • 確保在「要建置的分支」下方,將分支指定符設定為 */master。
  • 向下捲動至「指令碼路徑」。在這裡,將 Jenkins 檔案的名稱指定為 customJenkinsfile。點擊「儲存」。

之後,執行您的管道。Jenkins 會先從遠端儲存庫擷取您的程式碼。接著,它會使用自訂的 Jenkinsfile 來建立管道並執行所有階段。

您現在已經成功地使用「管道即程式碼」建立了您自己的軟體開發管道。此外,您還為管道指令碼啟用了版本控制。現在,您可以透過每次 Git 提交來追蹤您對管道程式碼所做的任何變更。接下來,是時候看看最佳實踐了。

撰寫有效「管道即程式碼」的最佳實踐

讓我們看看撰寫「管道即程式碼」時應遵循的最佳實踐。

  • 保持管道的簡潔,避免編寫過於複雜的條件。
  • 如果您在管道內執行太多指令,請將它們分成不同的步驟。
  • 將外部檔案與「管道即程式碼」指令碼的版本控制結合使用。
  • 利用 Groovy 等程式語言的特性來整合不同的步驟。
  • 避免呼叫 `Jenkins.getInstance` 或其存取器,以降低安全性和效能問題。
  • 不要覆蓋 `sh` 和 `timeout` 等內建管道命令。
  • 為複雜且耗費 CPU 的任務建立外部工具或指令碼,並將它們插入您的管道中。
  • 利用 Jenkins 提供的各種現有插件來處理您的用例。
  • 確保您已合併例外狀況和錯誤處理,因為事情可能會出錯。
  • 不要讓「管道即程式碼」與其內部的過多業務邏輯緊密耦合。
  • 盡可能使用參數化參數,以使管道具有可重複使用性。

「管道即程式碼」:複雜流程的簡單方法

總而言之,「管道即程式碼」透過將整個流程表示為程式碼,簡化了 CI/CD 管道的自動化。雖然 CI/CD 管道可以自動建置、測試和部署程式碼變更,但利用「管道即程式碼」則更進一步。它允許您以文字方式定義工作流程,而不是依賴圖形介面。

使用「管道即程式碼」,您可以確保工作流程中的每個步驟都按照正確的順序發生。您可以降低遇到不必要問題的風險。此外,您還可以獲得多項好處,包括一致性、可重複性和促進協作。

透過本指南,您現在知道如何使用 Jenkins(一種廣泛使用的 CI/CD 工具)來建立您自己的管道。Jenkins 提供了一個強大且靈活的平台,讓您能夠透過 Jenkinsfile 實作「管道即程式碼」。遵循最佳實踐,並建立可處理所有管道用例的工作流程。

如果您想了解更多關於 Jenkins 的資訊,您可以查看如何建立自己的 Jenkins 管道。