Jenkins Pipeline 語法

Pipeline 簡介

Jenkins2.x 的核心是使用 pipeline 來構建項目,也就是流水線,將 Jenkins1.0 版本中基于表單的配置信息比如 JDK/SVN 以及參數的配置都轉變成了代碼,即 pipeline as Code。

傳統的表單方式有以下缺點:

  • 需要大量的 web 表單交互,有時候需要進行很多次的切換,比較繁瑣。
  • 不能進行版本管理。
  • 可重用性差。

而采用 pipeline 的方式,項目的所有流程和配置都寫在 Jenkinsfile 文件中,移植時只要將此文件拷貝即可,無須繁瑣的配置;而且 pipeline 可以很直觀的看到每個階段的構建情況,再結合上 Blue Ocean 可以進行強大的流水線監控,方便、直觀、及時地獲取到構建結果。

在 Jenkins 中,把每一段管道比作是不同的 Job,不同 Job 的鏈接就需要用到 Pipeline 插件。Jenkins 的工作流程可以簡單概括為 build-deploy-test-release,每個流程之間我們都可以用 Pipeline 來連接,大致如下效果圖:

Jenkins pipeline 是基于 Groovy 語言實現的一種 DSL(Domain-Specific Language,領域特定語言),可以理解為適用于 Jenkins 的編程語言。

pipeline 支持兩種語法:腳本式語法(scripted pipeline)和聲明式語法(declarativepipeline)。早期的 pipeline plugin 只支持腳本式語法,聲明式語法是在 pipeline2.5 之后新增加的,相對而言,聲明式語法更簡單,即使沒有 groovy 語言的基礎也能進行基本的操作。Jenkins 社區的動向也是偏向于聲明式語法,所以以聲明式語法為例進行說明。

 

Pipeline 基本結構

pipeline{agent anystages{stage('build'){steps{echo 'build steps'}}}
}

以上是最最基本的一個 pipeline 結構,具體的含義如下:

  • pipeline:后面用一對 {} 也就是閉包,表示整條流水線,里面是流水線中具體的處理流程。
  • agent:用來指定整個流水線或者某一個階段在哪個機器節點上執行。如果是 any 的話表示該流水線或者階段可以運行在任意一個定義好的節點上。這個指令必須要有,而且一般會放在頂層  pipeline{...} 的下一層,在 stage{...} 中也可以使用 agent,但是一般不這么用。
  • stages:后面跟一對 {},類似于一個容器,封裝了一個或多個 stage,也就是將不同的階段組織在一起;例如 build 是一個 stage, test 是第二個 stage,deploy 是第三個 stage。通過 stage 隔離,讓  Pipeline 代碼讀寫非常直觀。
  • stage:后面跟一對 {},流水線中的某個階段,其中封裝了多個執行步驟,每個階段都需要有個名稱。
  • steps:封裝了在一個階段中的一個或多個具體的執行步驟。在本例中 echo 就是一個步驟。

接下來我們一一介紹上面提到的 pipeline 中包含的最基本的幾個 section,以及另外一些可選的 section。

 

agent

用來指定 pipeline 的執行節點,一般放在頂層的 pipeline 中。agent 部分支持幾種不同的參數以此來適應不同的應用場景。

1)any

作用:表示可以在任意的節點或者代理上執行此 pipeline。

代碼示例:

pipeline {agent any
}

2)none

作用:在 pipeline 的頂層應用中使用此參數的話表示不會為整個 pipeline 指定執行的節點,需要在每個 stage 部分用 pipeline 指定執行的節點。

代碼示例:

pipeline {agent nonestages {stage('test'){agent {label '具體的節點名稱'}}}
} 

3)label

作用:在標簽指定的可用代理上執行 pipeline 或 stage,比如 agent {label "label"} 表示流水線或者階段可以運行在任何一個具有 label 標簽的代理節點上。

代碼示例:

pipeline {agent {label '具體的一個節點 label 名稱'}
}

4)自定義工作空間

作用:代理節點的標簽新增了一個特性,允許為流水線或階段指定一個自定義的工作空間,用 customWorkspace 指令來指定。和 label 功能類似。

代碼示例:

pipeline {agent {node {label "xxx-agent-機器"customWorkspace "${env.JOB_NAME}/${env.BUILD_NUMBER}"}}
} 

此處的 node 可以換成 label,但是為了避免 Docker 代理節點中的 label 用法混淆,一般用 node 表示。這種類型的 agent 在實際工作中的使用場景是最多的

測試代碼

pipeline {agent {node {label "xxx-agent-機器"customWorkspace "${env.JOB_NAME}/${env.BUILD_NUMBER}"}} stages {stage ("Build") {bat "dir"  //執行windows下的bat命令} stage ('test') {echo ${JAVA_HOME}  //打印JAVA_HOME}}
}

可以將以上代碼段放到 Jenkinsfile 中或者在 Jenkins ui 中去執行。

 

POST

post 部分用來指定 pipeline 或者 stage 執行完畢后的一些操作,比如發送郵件、環境清理等。post 部分在 Jenkins 代碼中是可選的,可以放到頂層,也就是和 agent 同級,也可以放到stage 中。在 post 代碼塊中支持多種指令,比如:always、success、failure、aborted、unstable、changed 等等,我們一一來介紹。

1)always

作用:當 pipeline 執行完畢后一定會執行的操作,不管成功還是還失敗。比如說文件句柄的關閉或者數據庫的清理工作等。

代碼示例:

pipeline {agent anystages {stage ("Build") {bat "dir"}} post {always {script {//寫相關清除/恢復環境等操作代碼}}}
}

2)success

作用:當 pipeline 執行完畢后且構建結果為成功狀態時才會執行的操作。

代碼示例:

pipeline {agent anystages {stage ("Build") {bat "dir"}} post {success{script {//寫相關清除/恢復環境等操作代碼}}}
}

3)failure

作用:當 pipeline 執行完畢后且構建結果為失敗時執行的操作,比如發送錯誤日志給相關人員。

4)changed

作用:當 pipeline 執行完畢后且構建狀態和之前不一致時執行的操作。

5)aborted

作用:當 pipeline 被手動終止時執行的操作。

6)unstable

作用:當 pipeline 構建結果不穩定時執行的操作。

7)以上命令的組合

在 post 部分是可以包含多個條件塊,也就是以上命令的組合,比如:

pipeline {agent anystages {stage ("Build") {bat "dir"}}post {always {script {echo "post always "}} success{script {echo "post success"}} failure{script {echo "post failure"}}}
}

  

stages/stage/steps

  • stagesPipeline 中單個階段的操作封裝到 stages 中,stages 中可以包含多個 stage。
  • stage一個單獨的階段,實際上所有實際工作都將包含在一個或多個 stage 指令中。stage{…} 里面有一個強制的字符串參數,用來描述這個 stage 的作用,這個字符串參數是不支持變量的,只能你自己取名一個描述字段。
  • steps一個 stage 下至少有一個 steps,一般也就是一個 steps。可以在 steps 下寫調用一個或者幾個方法,也就是兩三行代碼。

有以下注意點

  • 在聲明式 pipeline 腳本中,有且只有一個 stages。
  • 一個 stage{…} 必須有且只有一個 steps{…}, 或者 parallel{…} 或者 stages {…},多層嵌套只支持在最后一個 stage{…} 里面。
  • 在聲明式語法中只支持 steps,不支持在 steps {…} 里面嵌套寫 step{…}。

 代碼示例:

pipeline {agent anystages {stage

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88503.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88503.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88503.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

搭建滲透測試環境

一、基于docker搭建靶場 #此步驟需要科學上網 #從軟件源中下載 docker.io 和 docker -compose 軟件包及其依賴項。 sudo apt-get install docker.io docker-compose #查看docker版本 docker -v #查看docker信息 docker info #重啟docker服務 sudo systemctl daemon-reload sudo…

(一)OpenCV——噪聲去除(降噪)

高斯濾波器(針對高斯噪聲) 高斯噪聲是指它的概率密度函數服從高斯分布(即正態分布)的一類噪聲。常見的高斯噪聲包括起伏噪聲、宇宙噪聲、熱噪聲和散粒噪聲等等。 高斯濾波(Gaussian filter) 包含許多種,包括低通、帶…

百度開源文心 4.5 系列開源大模型 GitCode 本地化部署,硅基流動:文心 vs. DeepSeek vs. Qwen 3.0 深度測評

百度開源文心 4.5 系列開源大模型 GitCode 本地化部署,硅基流動:文心 vs. DeepSeek vs. Qwen 3.0 深度測評 文章目錄百度開源文心 4.5 系列開源大模型 GitCode 本地化部署,硅基流動:文心 vs. DeepSeek vs. Qwen 3.0 深度測評背景百…

「日拱一碼」022 機器學習——數據劃分

目錄 基于單次隨機劃分的方法 普通單次隨機劃分(train_test_split) 分層單次隨機劃分(使用 train_test_split 的 stratify 參數) 基于多次隨機劃分的方法 普通多次隨機劃分(ShuffleSplit) 分層多次隨機劃分(StratifiedShuffleSplit…

lora網關

所需配置的引腳,SPI傳輸,PG13復位(輸出引腳,推挽輸出),PE2忙碌(輸入引腳,浮空輸入)PE6PE5輸出。若利用延時處理按鍵消抖,hal庫里用systick中斷實現延時&#…

5G IMS注冊關鍵一步:UE如何通過ePCO獲取P-CSCF地址

看似簡單的P-CSCF地址傳遞,背后是5G核心網控制面與用戶面的精密協作。ePCO作為高效的信令載體,承載著IMS業務觸達的第一把鑰匙。 在5G網絡中建立IMS PDN連接時,UE(用戶設備)獲取P-CSCF(Proxy-Call Session Control Function)地址是IMS業務(如VoLTE、VoNR)成功注冊和運…

JVM方法區的運行時常量區到底存儲哪些數據?

JDK8以后,運行時常量池邏輯上屬于方法區;但: 其中的字符串常量池實際位置移至到了java堆;其中一些符號引用也存儲到了元空間;字符串常量池,元空間,運行時常量區的具體關系請看這篇博客&#xf…

Go defer(二):從匯編的角度理解延遲調用的實現

Go的延遲調用機制會在當前函數返回前執行傳入的函數,它會經常被用于關閉文件描述符、關閉數據庫連接以及解鎖資源。之前的文章( Go defer(一):延遲調用的使用及其底層實現原理詳解 )詳細介紹了defer的使用以…

Android 12系統源碼_分屏模式(一)從最近任務觸發分屏模式

前言 打開MainActivity,然后進入最近任務觸發分屏,可以成功進入分屏模式。 本篇文章我們來具體梳理一下這個過程的源碼調用流程。 一 launcher3階段 1.1 源碼 //packages/apps/Launcher3/quickstep/src/com/android/quickstep/views/TaskView.java publi…

Flask 入門教程:用 Python 快速搭建你的第一個 Web 應用

文章目錄前言一、什么是 Flask?📌 Flask 的優勢1. 輕量靈活2. 易于上手3. 可擴展性強4. 自由度高5. 社區活躍,資料豐富Flask 主要用來做什么?二、Flask快速入門1.創建一個Flask項目2.開啟debug,修改host,端…

實習第一個小需求樣式問題總結

Vue2 vxe-table Element UI 表頭下拉詳情實現總結一、核心功能實現表頭下拉按鈕交互初始嘗試 expand-change 事件無法滿足需求&#xff0c;改用 vxe-table 的 toggle-row-expand 事件&#xff1a;<vxe-table toggle-row-expand"handleExpandChange"><temp…

Linux中LVM邏輯卷擴容

在Linux系統中對根目錄所在的LVM邏輯卷進行擴容&#xff0c;需要依次完成 物理卷擴容 ? 卷組擴容 ? 邏輯卷擴容 ? 文件系統擴容 四個步驟。以下是詳細操作流程&#xff1a;一、確認當前磁盤和LVM狀態# 1. 查看磁盤空間使用情況 df -h /# 2. 查看塊設備及LVM層級關系 lsblk# …

微軟365 PDF導出功能存在本地文件包含漏洞,可泄露敏感服務器數據

微軟365的"導出為PDF"功能近期被發現存在嚴重的本地文件包含(Local File Inclusion, LFI)漏洞&#xff0c;攻擊者可利用該漏洞獲取服務器端的敏感數據&#xff0c;包括配置文件、數據庫憑證和應用程序源代碼。該漏洞由安全研究員Gianluca Baldi發現并報告給微軟&…

臺球 PCOL:極致物理還原的網頁斯諾克引擎(附源碼深度解析)

> 無需下載,打開瀏覽器即可體驗專業級斯諾克!本文將揭秘網頁版臺球游戲的物理引擎與渲染核心技術 在游戲開發領域,臺球物理模擬一直被視為**剛體動力學皇冠上的明珠**。今天我們要解析的**臺球 PCOL**(Pure Canvas Online Billiards)正是一款突破性的網頁版斯諾克游戲…

springboot-2.3.3.RELEASE升級2.7.16,swagger2.9.2升級3.0.0過程

一、pom文件版本修改<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.16</version><relativePath/> </parent>如果用到了“spring-boot-starter…

Python-正則表達式-信息提取-滑動窗口-數據分發-文件加載及分析器-瀏覽器分析-學習筆記

序 欠4前年的一份筆記 &#xff0c;獻給今后的自己。 正則表達式 概述 正則表達式&#xff0c;Regular Expression&#xff0c;縮寫為regex、regexp、RE等。 正則表達式是文本處理極為重要的技術&#xff0c;用它可以對字符串按照某種規則進行檢索、替換。 1970年代&…

一文入門神經網絡:神經網絡概念初識

神經網絡的世界遠比你想象得更豐富多元。從基礎架構到前沿融合模型&#xff0c;我為你梳理了當前最值得關注的神經網絡類型&#xff0c;不僅包括那些“教科書級”的經典模型&#xff0c;也覆蓋了正在改變行業格局的新興架構。以下是系統分類與核心特點總結&#xff1a;一、基礎…

線上事故處理記錄

線上事故處理記錄 一、MySQL 導致的服務器 CPU 飆升 有一天&#xff0c;突然收到了服務器 CPU 飆升的告警信息&#xff0c;打開普羅米修斯查看 CPU 的使用情況&#xff0c;發現 CPU 確實飆升了&#xff0c;下面開始去進行問題定位了。 1. 首先連接到對應的服務器&#xff0c;然…

ParaCAD 筆記 png 圖紙標注數據集

ParaCAD-Dataset git lfs install git clone https://www.modelscope.cn/datasets/yuwenbonnie/ParaCAD-Dataset.git https://github.com/ParaCAD/ 不止100g 下個最小的 沒有三視圖

C#使用Semantic Kernel實現Embedding功能

1、背景 C#開發中&#xff0c;可以通過Semantic Kernel實現本地模型的調用和實現。 本地的Ollama的版本如下&#xff1a;安裝的Package如下&#xff1a;2、代碼實現 // See https://aka.ms/new-console-template for more information using Microsoft.Extensions.AI; using Mi…