文章目錄
- 前言
- Jenkins共享庫結構
- 1、共享庫演示
- 2、知識點補充
- 3、實踐使用共享庫格式化輸出日志
- 4、groovy基礎語法
- 4.1、 什么是 Groovy?
- 4.2、groovy特點
- 4.3、運行方法
- 4.4、標識符
- 4.5、基本數據類型
- 4.5.1、string類型
- 4.5.2、list類型
- 4.6、函數使用
- 4.7、正則表達式
- 5、常用的pipelineDSL方法
- 5.1、readJson數據格式化方法
- 5.2、withCredentials使用憑據方法
- 5.3、checkout下載代碼
- 5.4、publishHTML
- 5.5、input交互式方式
- 5.6、BuildUser獲取構建的用戶
- 5.7、httpRequest網絡
- 5.8、email郵件
- 總結
前言
共享庫這并不是一個全新的概念,其實在編程語言Python中,我們可以將Python代碼寫到一個文件中,當代碼數量增加,我們可以將代碼打包成模塊然后再以import的方式使用此模塊中的方法。
在Jenkins中使用Groovy語法,共享庫中存儲的每個文件都是一個groovy的類,每個文件(類)中包含一個或多個方法。每個方法包含groovy語句塊。
創建共享庫,共享庫的目的就是將一些反復使用的模塊進行封裝,比如拉取代碼模塊,郵件通知模塊,這樣使得你的Jenkinsfile看起來更加簡潔,減少代碼量。
可以在Git等版本控制系統中創建一個項目用于存儲共享庫。共享流水線有助于減少冗余并保持代碼整潔。
總結就是將所有的工具以共享庫的方式封裝起來
Jenkins共享庫結構
共享庫是一些獨立的Groovy腳本的集合,可以在外部源代碼控制倉庫(如Git或Subversion)中托管。
共享庫通過名稱、源代碼檢索方法(如SCM)以及可選的默認版本定義。名稱應該是一個簡短的標識符,因為它將在腳本中使用.
src目錄類似于標準java源目錄結構。執行流水線時,此目錄將添加到類目錄中
vars目錄托管腳本文件,這些腳本文件在管道中作為變量公開
resources目錄允許libraryResource從外部庫使用步驟來加載相關聯的非Groovy文件在gitee上創建一個共享庫jenkinslib,用于入門循環演示
1、共享庫演示
1)、在jenkins上引用上述創建的共享庫
2)、Jenkins添加gitee用戶名、密碼憑據
3)、在系統配置中使用git 配置全局流水線庫(使用gitee倉庫為主)
4)、以上三步做完之后,在gitee的jnekinslib倉庫下創建vars目錄,創建Jenkinsfile文件
5)、在Jenkinsfile文件中引用創建的共享庫
6)、修改流水線為
7)、jenkins流水線任務執行 看是否打印出來了傳參的內容(this is my jenkins lib)
2、知識點補充
怎么快速檢測pipeline是否正確?
1、vscdoe下載Jenkins Pipeline Linter Connector插件(下載過程不描述)
2、下載插件完成后,配置Jenkins的url、username、pwd
3、創建Jenkinsfile文件, 通過 vscode 命令面板 (Command Pallette) 使用 Validate Jenkins 開啟 Jenkinsfile 校驗
3、實踐使用共享庫格式化輸出日志
作用:為了更好的在控制臺高亮顯示每個階段的執行步驟,使用格式化輸出方式實現
步驟: 1、jenkins安裝ansicolor插件2、流水線生成ansicolor語法,如下圖1所示3、修改jenkinslib庫中的groovy腳本,添加日志格式化輸出,如下圖2所示4、修改jenkinfile,因為之前調用的PrintMsg傳參是1個參數,現在是傳入兩個參數,如下圖3、4所示5、執行流水線任務,查看console output輸入的樣式,如下圖5所示
4、groovy基礎語法
無論是聲明式還是腳本式的 Pipeline 都依賴了 Groovy 腳本,所以如果要很好的掌握 Pipeline 腳本的用法,我們非常有必要去了解下 Groovy 語言。
4.1、 什么是 Groovy?
Groovy是用于Java虛擬機的一種敏捷的動態語言,它是一種成熟的面向對象編程語言,既可以用于面向對象編程,又可以用作純粹的腳本語言。使用該種語言不必編寫過多的代碼,同時又具有閉包和動態語言中的其他特性Groovy是JVM的一個替代語言(替代是指可以用 Groovy 在Java平臺上進行 Java 編程),使用方式基本與使用 Java代碼的方式相同,該語言特別適合與Spring的動態語言支持一起使用,設計時充分考慮了Java集成,這使 Groovy 與 Java 代碼的互操作很容易。(注意:不是指Groovy替代java,而是指Groovy和java很好的結合編程
官方網站: https://groovy.apache.org
推薦groovy學習地址: https://www.w3cschool.cn/groovy/
4.2、groovy特點
1、構建在強大的Java語言之上 并 添加了從Python,Ruby和Smalltalk等語言中學到的 諸多特征,例如動態類型轉換、閉包和元編程(metaprogramming)支持。2、為Java開發者提供了 現代最流行的編程語言特性,而且學習成本很低(幾乎為零)。3、支持DSL(Domain Specific Languages領域定義語言)和其它簡潔的語法,讓代碼變得易于閱讀和維護。4、受檢查類型異常(Checked Exception)也可以不用捕獲。5、Groovy擁有處理原生類型,面向對象以及一個Ant DSL,使得創建Shell Scripts變得非常簡單。6、在開發Web,GUI,數據庫或控制臺程序時 通過 減少框架性代碼 大大提高了開發者的效率。7、支持單元測試和模擬(對象),可以 簡化測試。8、無縫集成 所有已經存在的 Java對象和類庫。9、直接編譯成Java字節碼,這樣可以在任何使用Java的地方 使用Groovy。10、支持函數式編程,不需要main函數。11、一些新的運算符。12、默認導入常用的包。13、斷言不支持jvm的-ea參數進行開關。14、支持對對象進行布爾求值。15、類不支持default作用域,且默認作用域為public。16、groovy中基本類型也是對象,可以直接調用對象的方法。
4.3、運行方法
可以使用 groovy 命令運行下面的程序:
class Example {static void main(String[] args) {// 使用 println 打印信息到 stdout/*除了上面的注釋方法外,這里沒也是注釋信息哦*/println 'Hello World'println "Hello World";}
}
groovy 1hello.groovy //運行方法Hello WorldHello World從輸出結果可以看出了 Groovy 里面支持單引號和雙引號兩種方式,
注釋 支持//和/**/兩種方式,
而且不以分號“;”結尾也可以,
但是推薦都帶上分號保持代碼的一致性
4.4、標識符
標識符被用來定義變量,函數或其他用戶定義的變量。標識符以字母、美元或下劃線開頭,切記不能以數字開頭
4.5、基本數據類型
4.5.1、string類型
字符串表示: 單引號、雙引號、三引號
常用方法:contains() 是否包含特定內容,返回true/falsesize() length() 字符串數量、大小長度toString() 轉換成字符串類型indexOf() 元素的索引endsWith() 是否指定字符串結尾minus() plus() 去掉、增加字符串reverse() 反向排序substring(1,2) 字符串的指定索引開始的子字符串toUpperCase() toLowerCase() 字符串大小寫轉換split() 字符串切割、默認為空格 返回列表
4.5.2、list類型
列表符號: []
常用方法:+、-、+=、-= 元素增加、減少add()、<< 增加元素isEmpty() 判斷是否為空intersect([2,3])、disjoint([1]) 取交集、判斷是否有交集flatten() 合并嵌套的列表unique() 去重reverse()、sort() 反轉、升序count() 元素個數join() 將元素按照參數鏈接sum() min() max() 求和、最小值、最大值contains() 包含特定元素remove(2) removeAll() 移除元素 each{} 遍歷
4.6、函數使用
Groovy 中的函數是使用返回類型或使用 def 關鍵字定義的,函數可以接收任意數量的參數,定義參數時,不必顯式定義類型,可以添加修飾符,如 public,private 和 protected,默認情況下,如果未提供可見性修飾符,則該方法為 public公共函數語法:def PrintMsg(value){//....println(value)return value}
4.7、正則表達式
5、常用的pipelineDSL方法
5.1、readJson數據格式化方法
在流水線語法中可以生成。必須安裝插件Pipeline Utility Steps
語法示例:
def response = readJSON text: "${scanResult}"
println(scanResult)
外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳
5.2、withCredentials使用憑據方法
withCredentials([string(credentialsId: "xxx",variable: "sometoken")])
{println(sometoken)
}
5.3、checkout下載代碼
也可以通過流水線語法生成
checkout([$class: 'GitSCM', branches: [[name: 'branchName']], extensions: [], userRemoteConfigs: [[credentialsId: "${credentialsId}", url: "${srcUrl}"]]])
5.4、publishHTML
生成單元測試報告使用它
publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: false, reportDir: '/tmp/', reportFiles: 'index.html', reportName: 'HTML Report', reportTitles: '', useWrapperFileDirectly: true])
5.5、input交互式方式
def result=input message: '選擇xxxx', ok: '提交', parameters: [extendedChoice(description: 'xxx',descriptionPropertyValue: '',multiSelectDelimiter: '.',name: 'failePositiveCase',quoteValue: false,saveJSONParameterToFile: false,type: 'PT_CHECKBOX',value: "1,2,3",visibleItemCount: 99)]
5.6、BuildUser獲取構建的用戶
// 前提是安裝build user vars插件,而且要再系統配置中勾選開啟
wrap([$class: 'BuildUser']){echo "full name is $BUILD_USER"echo "user id is $BUILD_USER"echo "user email is $BUILD_USER"
}
5.7、httpRequest網絡
// 安裝HTTP Request插件
ApiUrl= "http://xxxx/api/project_branches/list?project=${projectName}"
Result= httpRequest authentication: 'xxxx',quiet: true,contentType: 'APPLICATION_JSON',url: "${ApiUrl}"
5.8、email郵件
// 安裝Email Extension Template、Email Extension插件
總結
本篇文章從如何生成pipeline DSL常用語法和groovy基礎語法為前提,作為一個了解知識