基于Jenkins的DevOps工程實踐之Jenkins共享庫

文章目錄

  • 前言
  • 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基礎語法為前提,作為一個了解知識

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

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

相關文章

【Qt4】Qt4中實現PDF預覽

方案一&#xff1a; 在Qt4中預覽PDF文件&#xff0c;你可以使用多種方法&#xff0c;但最常見和簡單的方法之一是使用第三方庫。Qt本身并沒有內置直接支持PDF預覽的功能&#xff0c;但你可以通過集成如Poppler、MuPDF等庫來實現這一功能。下面我將展示如何使用Poppler庫在Qt4中…

php artisan resetPass 執行密碼重置失敗的原因?php artisan resetPass是什么 如何使用?-優雅草卓伊凡

php artisan resetPass 執行密碼重置失敗的原因&#xff1f;php artisan resetPass是什么 如何使用&#xff1f;-優雅草卓伊凡 可能的原因 命令不存在&#xff1a;如果你沒有正確定義這個命令&#xff0c;Laravel 會報錯而不是提示”重置密碼失敗”用戶不存在&#xff1a;’a…

ai說什么是注解,并以angular ts為例

在編程中&#xff0c;注解&#xff08;Annotation&#xff09; 是一種特殊的語法結構&#xff0c;用于為代碼添加元數據&#xff08;metadata&#xff09;&#xff0c;從而在不修改代碼邏輯的情況下&#xff0c;提供額外的信息或指示編譯器、框架、工具如何處理這些代碼。注解通…

【MySQL】-- 聯合查詢

文章目錄 1. 簡介1.1 為什么要使用聯合查詢1.2 多表聯合查詢時MySQL內部是如何進行計算的 2. 內連接2.1 語法2.2 示例 3. 外連接3.1 語法3.2 示例 4. 自連接4.1 應用場景4.2 示例4.3 表連接練習 5. 子查詢5.1 語法5.2 單行子查詢5.3 多行子查詢5.4 多列子查詢5.5 在from 子句中…

【多線程】六、基于阻塞隊列的生產者消費者模型

文章目錄 Ⅰ. 生產者消費者模型的概念Ⅱ. 生產者消費者模型的優點Ⅲ. 基于阻塞隊列的生產者消費者模型MakefileBlock_queue.hpptask.hpptest.cpp Ⅳ. 如何理解提高了效率??? Ⅰ. 生產者消費者模型的概念 ? 生產者消費者模型是一種常見的并發模式&#xff0c;用于解決生產者…

【Vue】全局事件總線 TodoList 事件總線

目錄 一、 實現所有組件看到x事件 二、 實現$on $off 以及 $emit 總結不易~ 本章節對我有很大的收獲&#xff0c; 希望對你也是&#xff01;&#xff01;&#xff01; 本節素材已上傳至Gitee&#xff1a;yihaohhh/我愛Vue - Gitee.com 全局事件總線圖&#xff1a; 本節素材…

Python編程virtualenv庫的簡介和使用方法

Python編程virtualenv庫的簡介和使用方法 virtualenv和conda的區別是什么

MySQL的行級鎖鎖的到底是什么?

大家好&#xff0c;我是鋒哥。今天分享關于【MySQL的行級鎖鎖的到底是什么?】面試題。希望對大家有幫助&#xff1b; MySQL的行級鎖鎖的到底是什么? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 MySQL的行級鎖是數據庫管理系統&#xff08;DBMS&#xff09;的一…

【C++游戲引擎開發】第33篇:物理引擎(Bullet)—射線檢測

一、射線檢測核心理論體系 1.1 射線檢測的數學基礎 1.1.1 參數化射線方程 射線在三維空間中的數學表達采用參數方程: r ( t ) = o + t d ^ ( t ∈ [

【操作系統】線程崩潰機制詳解

在分布式系統與多線程編程的世界里&#xff0c;一個看似簡單的問題卻暗藏玄機&#xff1a;當某條線程突然崩潰&#xff0c;其所屬進程會隨之消亡嗎&#xff1f;這個問題背后隱藏著操作系統與編程語言的精妙設計&#xff0c;本文將從底層原理到工程實踐層層剖析。 一、線程崩潰…

無人機 | 無人機設計概述

無人機設計是一個復雜的系統工程&#xff0c;涉及空氣動力學、電子技術、材料科學、控制算法等多個領域的綜合應用。以下是無人機設計的主要模塊和關鍵要素概述&#xff1a; 一、總體設計目標 任務需求定義 用途&#xff1a;航拍、物流、農業、軍事偵察、環境監測等性能指標&am…

強啊!Oracle Database 23aiOracle Database 23ai:使用列別名進行分組排序!

大家好&#xff0c;這里是架構資源棧&#xff01;點擊上方關注&#xff0c;添加“星標”&#xff0c;一起學習大廠前沿架構&#xff01; 從 Oracle Database 23ai 開始&#xff0c;您可以在 GROUP BY 和 HAVING 子句中直接使用列別名。此功能在早期版本的 Oracle Database 中不…

Modbus 轉 IEC61850 網關

第一章 產品概述 Modbus 轉 IEC61850 網關型號 SG-IEC61850-Modbus &#xff0c;是三格電子推出的工業級網關&#xff08;以 下簡稱盒子或網關&#xff09;&#xff0c;主要用于 Modbus RTU/TCP 數據采集、 DLT645-1997/2007 數據采集&#xff0c; 可接多功能電力儀表…

MySQL 中的 MVCC 是什么?

MySQL 中的 MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并發控制&#xff09; 是一種用于實現高并發讀寫操作的機制&#xff0c;它通過維護數據的多個版本來解決讀寫沖突&#xff0c;從而在保證事務隔離性的同時&#xff0c;減少鎖的使用&#xff0c…

【Python】讓Selenium 像Beautifulsoup一樣,用解析HTML 結構的方式提取元素!

我在使用selenium的find_element的方式去獲取網頁元素&#xff0c;一般通過xpath、css_selector、class_name的方式去獲取元素的絕對位置。 但是有時候如果網頁多了一些彈窗或者啥之類的&#xff0c;絕對位置會發生變化&#xff0c;使用xpath等方法&#xff0c;需要經常變動。…

使用xlwings將excel表中將無規律的文本型數字批量轉化成真正的數字

之前我寫了一篇文章excel表中將無規律的文本型數字批量轉化成真正的數字-CSDN博客 是使用excel自帶的操作&#xff0c;相對繁瑣。 今天使用xlwings操作&#xff0c;表格如下&#xff08;有真正的數字&#xff0c;也有文本型數字&#xff0c;混在在一起&#xff09;&#xff1…

ICML 2025錄取率公布,spotlight posters僅占2.6%

近日&#xff0c;ICML 2025公布了論文錄用結果。本次大會共收到 12,107篇有效論文投稿&#xff0c;比去年增加了28%&#xff0c;今年錄取論文3,260篇&#xff0c;錄取率為 26.9%。其中僅有313篇被列為“焦點海報”&#xff08;即所有投稿中排名前2.6%的論文&#xff09;&#x…

全局網絡:重構數字時代的連接范式

從局部到全局 —— 網絡架構的范式革命 在全球化與數字化深度融合的今天&#xff0c;傳統網絡架構的 “碎片化” 問題日益凸顯&#xff1a;跨地域數據流通低效、設備互聯孤島化、安全策略難以統一。 全局網絡作為一種突破地域與技術邊界的新型網絡架構&#xff0c;正成為企業…

SpringAI實現AI應用-內置顧問

SpringAI實戰鏈接 1.SpringAl實現AI應用-快速搭建-CSDN博客 2.SpringAI實現AI應用-搭建知識庫-CSDN博客 3.SpringAI實現AI應用-內置顧問-CSDN博客 4.SpringAI實現AI應用-使用redis持久化聊天記憶-CSDN博客 5.SpringAI實現AI應用-自定義顧問&#xff08;Advisor&#xff09…

Nginx核心原理以及案例分析(AI)

一、Nginx核心原理分析 1. ?事件驅動與非阻塞模型? ?Epoll異步機制?&#xff1a;基于Linux的epoll模型實現異步非阻塞I/O處理&#xff0c;單線程可高效管理數萬并發連接&#xff0c;避免傳統select模型的輪詢性能瓶頸。?多進程架構?&#xff1a;采用Master-Worker模式&…