在Jenkins 2.0中,基於 Jenkins Pipeline,用戶能夠在一個 JenkinsFile 中快速實現一個項目的從構建、測試以到發佈的完整流程,靈活方便地實現持續交付,而且能夠保存和管理這個流水線的定義。
也就是說,Jenkins 2.0把Jenkins1.0中相關配置信息都轉換成Code形式,即Pipeline as Code。html
Jenkinsfile 定義了流水線的各個階段,在每一個階段能夠執行相應的任務,實現了構建步驟代碼化、構建過程視圖化。
不一樣的Jenkins Plugin 擴展了Pipeline DSL可用的步驟和操做。node
以流水線任務爲例:
在Jenkins job配置頁面的pipeline部分,能夠選擇pipeline script 或者 pipeline script from SCM
點擊「Pipeline Syntax」能夠查看Pipeline內置文檔。docker
在Scripted Pipeline的JenkinsFile 中能夠定義多個 Groovy 函數來擴展 Jenkins Pipeline 的能力
所以這種方式受 Jenkins 的限制較少,能夠靈活控制和定義一個流水線,實現複雜的功能。express
使用預約義的結構,Jenkins 已經預置了不少描述流水線的結構,能夠快速創建流水線
雖然一樣支持寫 Groovy 腳本,官方推薦將Groovy 腳本內容定義在 Shared Libraries 中
因爲須要使用預約義的結構,對於複雜性的功能難以有效支持
爲與BlueOcean腳本編輯器兼容,一般建議使用Declarative Pipeline的方式進行編寫,這種語法結構也會是將來的趨勢。apache
全部有效的Declarative Pipeline必須包含在一個pipeline塊內。
除了個別限定外,Declarative Pipeline中的基本語句和表達式遵循與Groovy語法相同的規則。併發
pipeline { agent {} options {} parameters {} stages { stage { when {} steps {} } parallel { stage {} stage {} } } post { always {} } }
stagesmaven
stage編輯器
steps函數
agent - 經過 agent 定義整個Pipeline或特定階段的執行環境,實現靈活調度資源 - Agent在Pipeline中必需存在 - 參數 - any : 在任何可用的agent 上執行Pipeline或stage - none : 當在pipeline塊的頂層使用none時,將不會爲整個Pipeline運行分配全局agent ,每一個stage部分將須要包含其本身的agent部分 - label : 指定具體的 Jenkins Slave Node,也能夠單獨指定Stage的執行環境 - docker : 執行Pipeline或stage時會動態啓動一個docker節點執行Pipelines,還能夠接受一個args,直接傳遞給docker run調用 - dockerfile : 使用從Dockerfile源存儲庫中包含的容器來構建執行Pipeline或stage - node : 在node中能夠定義 label 和 customWorkspace(自定義運行的工做空間)等 環境變量 - 能夠爲全局或stage定義變量,例如`environment { aaa = 'bbb' }` - 經過 env 訪問自定義的和Jenkins預置的環境變量,例如`${env.JOB_NAME}` 參數 - 經過 parameters 定義參數,例如`parameters { string(defaultValue: "xxx", description: 'yyy', name: 'zzz') }` - 經過 params 訪問構建時的參數,例如`${params.xxx}` - 支持booleanParam, choice, credentials, file, text, password, string等參數類型 options - 在Pipeline自己內配置Pipeline專用選項 - buildDiscarder : pipeline保持構建的最大個數 - disableConcurrentBuilds : 不容許並行執行Pipeline,可用於防止同時訪問共享資源等 - skipStagesAfterUnstable : 一旦構建狀態進入了「Unstable」狀態,就跳過此stage - timeout : 設置Pipeline運行的超時時間,例如`options { timeout(time: 1, unit: 'HOURS') }` - retry : 失敗後,重試整個Pipeline的次數,例如`options { retry(3) }` - timestamps : 預約義由Pipeline生成的全部控制檯輸出時間,例如`options { timestamps() }` tools - 經過tools可自動安裝工具,並放置環境變量到PATH。若是agent none,將被忽略。 - 工具名稱必須在Jenkins的全局工具配置中存在。 - 示例`tools { maven 'apache-maven-3.5.2' }` when - 經過 when 根據給定的條件肯定是否執行該階段,控制流程走向 - 必須至少包含一個條件 - 多種內置條件 - branch : 當正在構建的分支與給出的分支模式匹配時執行(僅適用於多分支Pipeline) - environment : 當指定的環境變量設置爲給定值時執行 - expression : 當指定的Groovy表達式求值爲true時執行 - not : 當嵌套條件爲false時執行。必須包含一個條件 - allOf : 當全部嵌套條件都爲真時執行。必須至少包含一個條件 - anyOf : 當至少一個嵌套條件爲真時執行。必須至少包含一個條件 Parallel - 經過 parallel 定義併發步驟 - 對耗時長,相互不存在依賴的stage可使用此方式提高運行效率 - 除了parallel stage,單個parallel裏的多個step也可使用並行的方式運行 超時、重試 - 經過 timout 定義超時時間,例如`timeout(time: 3, unit: "MINUTES") { xxxyyyzzz }` - 經過 retry 定義重試次數,例如`retry(3) { xxxyyyzzz }` post - 經過 post 定義資源清理、通知等,也就是定義Pipeline或stage運行結束時的操做 - 與Stages平級 - 有多種不一樣的condition: always、success、failure、unstable、changed - always : 老是運行,不管Pipeline運行的完成狀態如何。 - changed : 只有當前Pipeline運行的狀態與先前完成的Pipeline的狀態不一樣時,才能運行。 - failure : 僅當前Pipeline處於「失敗」狀態時才運行,一般在Web UI中用紅色指示表示。 - success : 僅當前Pipeline具備「成功」狀態時才運行,一般在具備藍色或綠色指示的Web UI中表示。 - unstable : 僅當前Pipeline具備「不穩定」狀態時才運行,一般在具備黃色指示的Web UI中表示。 - aborted : 只有當前Pipeline處於「停止」狀態時,纔會運行,一般在具備灰色指示的Web UI中表示。 觸發方式 - 經過 triggers 定義Pipeline自動化觸發的方式 - cron : 以cron風格來定義Pipeline觸發的常規間隔 - pollSCM : 以cron風格來定義Jenkins檢查SCM源更改的常規間隔。若是存在新的更改,則Pipeline將被從新觸發
都是pipeline代碼的持久實現,都可以使用pipeline內置的插件或者插件提供的steps,二者均可以利用共享庫擴展。
不一樣之處在於語法和靈活性:工具