目錄
前言
流水線概念
什么是流水線
Jenkins流水線
pipeline
node
stage
step
創建一個簡單的流水線
創建Pipeline項目
選擇模板
測試
前言
????????提到 CI 工具,首先想到的就是“CI 界”的大佬——Jenkjns,雖然在云原生爆發的年代,蹦出來了很多云原生的 CI 工具,但是都不足以撼動 Jenkins 的地位。在企業中對于持續集成、持續部署的需求非常多,并且也會經常有-些比較復雜的需求,此時新生的 CI 工具不足以支撐這些很復雜的需求。但是 Jenkins豐富的插件基本上可以滿足任何場景。
流水線概念
什么是流水線
????????Jenkins 流 水 線 是 一 套 插 件 , 它 支 持 在 Jenkins 中 實 現 和 集 成 持 續 交 付 流 水 線(ContinuousDeliveryPipeline)。流水線提供了一組可擴展的工具,用于通過 Pipeline DSL 將簡單到復雜的交付流水線以代碼的形勢展現,類似于基礎設施即代碼。
????????持續交付流水線會經歷一個復雜的過程:從版本控制、向用戶和客戶提交軟件、軟件的每次變更(提交代碼到倉庫)到軟件發布(Release)。這個過程包括以一種可靠并可重復的方式構建軟件,以及通過多個測試和部署階段來開發構建好的軟件(稱為 Build)。
????????Jenkins 流水線的定義被寫在一個文本文件中(一般為 Jenkinshle),該文件“定制”了整個構建軟件的過程. Jenkinsfile 也可以被提交到項目的代碼倉庫中,在 Jenkjns 中可以直接引用。將持續交付流水線作為應用程序的一部分,像其他代碼一樣進行版本化和審查,這是流水線即代碼的基礎。
創建 Jenkinsfile 并提交到代碼倉庫中的好處如下:
- 自動為所有分支創建流水線構建過程。
- 在流水線上進行代碼復查/迭代。
- 對流水線進行審計跟蹤。
- 流水線的代碼可以被項目的多個成員查看和編輯。
- 可以對 Jenkinsfile 進行版本控制。
Jenkins流水線
????????Jenkins 流水線主要分為聲明式分和腳本式兩種,包含 pipline(流水線)、node(節點)、stage(階段)、step(步驟)等區塊。
pipeline
????????pipeline 是用戶定義的一個持續交付(CD)流水線模型。流水線的代碼定義了整個構建過程,包括構建、測試和交付應用程序的階段。另外,pipeline 塊是聲明式流水線語法的關鍵部分。
node
????????node 是—個機器,它是 Jenkins 環境的-部分,另外,node 塊是腳本化流水線語法的關鍵部分。
stage
????????stage 塊定義了在整個流水線的執行任務中概念不同的子集(比如 Bujld、Test、Deploy 階段),它被許多插件用于可視化 Jenkins 流水線當前的狀態/進展。
step
????????本質上是指通過一個單一的任務告訴 Jenkins 在特定的時間點需要做什么,比如要執行 shell 命令,可以使用 sh SHELL_COMMAND。其運行里程如下圖所示:
????????從上文可以了解,Jenkins 流水線分為腳本式和聲明式,而聲明式是“新一代”的流水線, 比腳本式更加靈活,可讀性更強,并且聲明式流水線支持以圖形化的方式進行編輯,所以聲明式流水線是著重學習的對象。
創建一個簡單的流水線
創建Pipeline項目
選擇模板
在定義中選擇“Pipline script”,模板使用“Hello World”
- stages:代表整個流水線的所有執行階段。通常 stages 只有 1 個,里面包含多個 stage
- stage:代表流水線中的某個階段,可能出現 n 個。一般分為拉取代碼,編譯構建,部署等階段。
- steps:代表一個階段內需要執行的邏輯。steps 里面是 shell 腳本,git 拉取代碼,ssh 遠程發布等任意內容。
agent 指定了流水線的執行節點。
參數:
- any 在任何可用的節點上執行 pipeline。
- none 沒有指定 agent 的時候默認。
- label 在指定標簽上的節點上運行 Pipeline。
- node 允許額外的選項。
根據流水線或階段的完成情況而運行(取決于流水線中 post 部分的位置).
post 支持以下post-condition 塊中的其中之一: always, changed, failure, success, unstable, 和 aborted。這些條件塊允許在 post 部分的步驟的執行取決于流水線或階段的完成狀態。
- always 無論流水線或者階段的完成狀態。
- changed 只有當流水線或者階段完成狀態與之前不同時。
- failure 只有當流水線或者階段狀態為”failure”運行。
- success 只有當流水線或者階段狀態為”success”運行。
- unstable 只有當流水線或者階段狀態為”unstable”運行。例如:測試失敗。
pipeline {agent anystages {stage('Example') {steps {echo 'Hello World'}}}post {always {echo 'I will always say Hello again!'}}
}