Jenkins擴展篇-流水線腳本語法

JenkinsFile可以通過兩種語法來聲明流水線結構,一種是聲明式語法,另一種是腳本式語法。

腳本式語法以Groovy語言為基礎,語法結構同Groovy相同。

由于Groovy學習不適合所有初學者,所以Jenkins團隊為編寫Jenkins流水線提供一種更簡單、更有主見的語法-聲明式。

兩者本質上是相同的流水線子系統。即他們都是 “流水線即代碼” 的持久實現,都能夠使用構建到流水線中或插件提供的步驟,都能夠使用 共享庫

但是它們的區別在于語法和靈活性。聲明式限制了用戶使用更嚴格和預定義的結構, 但是略顯繁瑣。腳本化提供了很少的限制, 以至于對腳本和語法的唯一限制往往是由Groovy子集本身定義的,而不是任何特定于流水線的系統, 這也使得腳本式語法成為高級用戶和那些有更復雜需求的人的理想選擇。

腳本式語法

流水線腳本結構

node{
stage('Build'){
checkout scm
echo 'start build'
}
stage('Test'){
echo 'start test'
}
stage('Deploy'){
echo 'start deploy'
}
}

Node(節點): 一個 Node 就是一個 Jenkins 節點,或者是 Master,或者是 Agent,是執行 Step 的具體運行環境,Pipeline 執行中的大部分工作都是在一個或多個聲明 Node 步驟的上下文中完成的。如果不指定參數,則默認在master節點運行job

Stage(環節): 一個 Pipeline 可以從邏輯上劃分為若干個 Stage,每個 Stage 代表一組操作,如:Build、Test、Deploy。注意,Stage 是一個邏輯分組的概念,可以跨多個 Node。即,一個stage語句塊可以包含node,表示不同的節點執行響應的任務步驟。

Step(步驟): Step 是最基本的操作單元,小到執行一個 Shell 腳本,大到構建一個 Docker 鏡像,由各類 Jenkins 插件提供,當插件擴展Pipeline DSL 時,通常意味著插件已經實現了一個新的步驟。

另外在 Jenkins Pipeline 中定義的 Stage(各個階段的邏輯劃分),Jenkins 提供了 Stage View 插件,按照 Stage 邏輯劃分任務,對用戶透明化、可視化展示流水線的執行,如下圖:

圖片

基本語法

腳本式語法遵從Groovy腳本語言設計,常見的Groovy語法都可以用到流水線腳本中

內置函數

有很多特殊的Step用于pipeline腳本中,如前面提到的node或stage。下面列出一些在你當前插件集合中所有可以用到的step。其他插件提供的pipeline集成功能可以通過更新插件做到。

通常Step 的參數是以鍵值對形式傳遞的,但是如果此步驟只有一個必填參數,那么可以省略參數名,如:

readFile 'build.properties'

是下面這種方式的簡寫

readFile file: 'build.properties'

但是如果有多個必填參數,那么參數名必須指定:

readFile file: 'build.properties', encoding: 'ISO-8859-1'

參數直接用逗號隔開

許多步驟的參數會用到復雜的嵌套配置(一些嵌套配置對象反過來有對象類型的參數),下面列出三種方式指定嵌套對象,按照優先級排列。

1.一些配置對象定義自定義符號。這些用于表示步進調用的符號,或者使用命名參數映射的其他函數調用:

splitTests count(3)

或拼出強制性參數名稱:

splitTests parallelism: count(size: 3)

與使用舊的第二語法選項的等效項比較:

splitTests parallelism: [$class: 'CountDrivenParallelism', size: 3]

委托給單個對象的某些Pipeline步驟允許在明確的情況下省略實際的步驟名稱,因此您可以簡單地編寫:

archiveArtifacts '**.txt'

而不是:

step([$class: 'ArtifactArchiver', artifacts: '**.txt'])

嵌套配置是一個實際值,可以保存到變量等中:

def parallelism(deterministic) {
deterministic ? count(3) : time(15)
}
splitTests parallelism(true)

2.使用參數的鍵值對。可以省略默認值。(注意,這[1, 2, 3]是Groovy中的列表,而是[a: 1, b: 2, c: 3]字典。)

特殊映射鍵 c l a s s 用于表示所請求對象的簡單或(必要時)完全限定類名。如果包含的參數只允許一種嵌套對象(或列表),則 class用于表示所請求對象的簡單或(必要時)完全限定類名。如果包含的參數只允許一種嵌套對象(或列表),則 class用于表示所請求對象的簡單或(必要時)完全限定類名。如果包含的參數只允許一種嵌套對象(或列表),則class可以省略:

checkout([$class: 'GitSCM', userRemoteConfigs: [[url: 'git://…'], extensions: [[$class: 'CleanBeforeCheckout']]])

在這個例子中,GitSCM必須指定來區分的種類SCM所使用的delegate的checkout (單強制參數名稱delegate可省略);

并且CleanBeforeCheckout必須被指定來區分不同類別的GitSCMExtension由所使用extensions的GitSCM-a“異質”列表;

但$class: 'UserRemoteConfig’由于可以省略userRemoteConfigs的GitSCM被定義為只包含UserRemoteConfigS-它是一個“均勻的”列表。(在第一種語法中,同類列表不允許有這樣的遺漏。)

請注意,如果給出單個參數,省略名稱,并且該參數是映射,則必須將其括在括號中以避免語法歧義。

3使用Java對象:

import hudson.plugins.git。*
import hudson.plugins.git.extensions.impl。*
checkout(new GitSCM([new UserRemoteConfig('git:// ...',null,null,null)],null,false,[],null,null,[new CleanBeforeCheckout()]))

除了細節程度更深入Groovy語法,這些腳本如果沒有簽名批準通過則無法在Groovy沙箱中運行,這使得此模式在典型的安全Jenkins中無法運行。

代碼生成器

在流水線任務的主頁面有一個pipeline語法菜單,點擊進入可以生成常用的語法

圖片

選擇下拉框里面的示例步驟,可以選擇你需要的step,如讀取文件,填入相關參數點擊生成流水線腳本,再把生成的流水腳本復制到你的pipeline腳本中即可。

圖片

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!?

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

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

相關文章

kubernetes學習-概念5

服務(Service) Kubernetes 中 Service 是 將運行在一個或一組 Pod 上的網絡應用程序公開為網絡服務的方法。 Kubernetes 中 Service 的一個關鍵目標是讓你無需修改現有應用以使用某種不熟悉的服務發現機制。 你可以在 Pod 集合中運行代碼,無…

nginx使用詳解:轉發規則、負載均衡、server_name

文章目錄 一、nginx常用的轉發規則location 指令說明location轉發使用 二、upstream負載均衡使用三、server_name使用四、其他常用配置限制請求類型處理靜態資源目錄遍歷問題限制客戶端使用的ip或者域名 五、需要注意的地方location /api1 探討location ~ /api1 探討&#xff0…

DataFunSummit:2023年OLAP引擎架構峰會-核心PPT資料下載

一、峰會簡介 OLAP技術是當前大數據領域的熱門方向,該領域在各個行業都有廣泛的使用場景,對OLAP引擎的功能有豐富多樣的需求。同時,在性能、穩定性和成本方面,也有諸多挑戰。目前,OLAP技術沒有形成統一的事實標準&…

redis性能管理

redis的數據庫是存放在內存當中,所以對內存的監控至關重要 redis內存監控和解析 1.如何查看redis內存使用情況 [rootlocalhost utils]# redis-cli -h 20.0.0.170 -p 6379 20.0.0.170:6379> info memory used_memory:853336 //redis中數據占用的內存 use…

觸發設備離線

業務場景 業務開發過程中,我們經常會需要判斷遠程終端是否在線,當終端離線的時候我們需要發送消息告知相應的系統, 環形隊列 1.創建一個index從0到30的環形隊列(本質是個數組) 2.環上每一個slot是一個Set&#xf…

python 執行系統命令

subprocess 模塊和 os.system 或 os.popen 等函數相比,功能更為強大和靈活,是 Python 官方推薦的執行系統命令的方法。主要的優勢包括: 更強的錯誤處理:subprocess 模塊可以更精細地控制錯誤輸出和錯誤代碼,而 os.syst…

自定義springboot的生命周期函數在項目啟動完成后去取配置文件中的值

主要是實現smartLifecycle類 package com.ruoyi.workflow.util;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springfr…

MYSQL索引使用注意事項

索引使用注意事項: 1.索引列運算 不要在索引列上進行運算操作,否則索引將失效; 2.字符串不加引號 字符串類型使用時,不加引號,否則索引將失效; 3.模糊查詢 如果僅僅是尾部模糊匹配,索引將不會失…

防火墻暴露端口

如果你想開通防火墻上的端口,具體的操作方式可能會取決于你所使用的操作系統。以下是一些常見操作系統的步驟: 1. Linux(例如,Ubuntu 或 CentOS): 使用 ufw(適用于 Ubuntu): # 開…

RK平臺查看板子上的dts信息

簡介 dts文件描述了硬件每個模塊的信息,我們嵌入式軟件的調試很多時候都是在改dts文件,有時候我們不確定板子上的固件是否已經更新了我們的修改,這時候我們可以直接讀取板子上的dts信息,下面來演示一下。 進入uboot命令行模式 …

關于軟raid的實現及常見問題

RAID概念 磁盤陣列(Redundant Arrays of Independent Disks,RAID),有“獨立磁盤構成的具有冗余能力的陣列”之意。 磁盤陣列是由很多價格較便宜的磁盤,以硬件(RAID卡)或軟件(MDADM&…

關于用css設置input輸入框hover的時候的樣式以及當input為disabled的時候,不要讓hover樣式生效

效果如果&#xff1a; 編輯狀態下的時候&#xff1a; 只讀狀態下的時候&#xff1a; 代碼如圖&#xff1a; <input type"text" name"dataForm.exportCode" id"exportCodeItem" required :disabled"editDisabled" />input:not(…

【前端學java】語法練習-工具類的封裝(13)

往期回顧&#xff1a; 【前端學java】JAVA開發的依賴安裝與環境配置 &#xff08;0&#xff09;【前端學 java】java的基礎語法&#xff08;1&#xff09;【前端學java】JAVA中的packge與import&#xff08;2&#xff09;【前端學java】面向對象編程基礎-類的使用 &#xff08…

java.net.UnknownHostException: eureka

java.net.UnknownHostException: eureka 哦。HOST漏了 #linux /etc/hosts #windows C:\Windows\System32\drivers\etc\hosts 127.0.0.1 eureka7000 127.0.0.1 eureka7001 127.0.0.1 eureka7002

maven打包可執行jar含依賴lib

修改pom.xml <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- jdk8可用&#xff0c;其他jdk版本可能需改插件版本 --><version>2.3.7.RE…

sql調優

慢查詢 SQL 治理方案 一、SQL 性能下降的原因 在對 SQL 進行分析之前&#xff0c;需要明確可能導致 SQL 執行性能下降的原因進行分析&#xff0c;執行性能下降可以體現在很多方面&#xff1a; 查詢語句寫的爛索引沒加好表數據過大數據庫連接數不夠查詢的數據量過大被其他慢s…

MyBatisPlus代碼生成

基礎依賴 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

visual studio 如何建立 C 語言項目

安裝這個 模塊。 新建 空項目 創建完成 寫demo 點擊運行&#xff1a;

【1day】泛微e-office OA系統user_page接口未授權訪問漏洞學習

注:該文章來自作者日常學習筆記,請勿利用文章內的相關技術從事非法測試,如因此產生的一切不良后果與作者無關。 目錄 一、漏洞描述 二、影響版本 三、資產測繪 四、漏洞復現