Jenkins的Pipeline概念

文章目錄

  • Pipeline
    • 什么是Jenkins Pipeline
    • 聲明式和腳本式Pipeline語法
    • 為何使用Pipeline
    • Pipeline概念
      • Pipeline
      • Node
      • Stage
      • Step
    • Pipeline語法概述
      • 聲明式Pipeline
      • 腳本式Pipeline
    • Pipeline示例
  • 參考

Pipeline

什么是Jenkins Pipeline

Jenkins Pipeline是一套插件,它支持實現和集成“continuous delivery (CD) pipeline”到Jenkins。

CD pipeline是流程的自動化表達,用于從版本控制向用戶和客戶獲取軟件。 軟件的每個變化(在源碼控制中提交),在其被發布的過程中,都經歷了一個復雜的過程。該過程包括了以一種可靠并可重復的方式來構建軟件, 以及通過測試和部署的多階段來處理構建軟件(稱為一個build)。

Pipeline提供了一組可擴展的工具,通過“Pipeline domain-specific language (DSL) syntax”對從簡單到復雜的交付pipeline“作為代碼”來建模。

Jenkins Pipeline的定義寫在一個文本文件中(稱為 Jenkinsfile ),該文件可以被提交到項目的源碼控制倉庫。這是“Pipeline-as-code”的基礎;將CD pipeline作為應用的一部分,像其它代碼一樣,可以版本化和審查。

創建 Jenkinsfile 并提交到源碼控制,提供了很多立竿見影的好處:

  • 自動為所有branch和PR(Pull Request)創建Pipeline構建流程。
  • 在Pipeline上代碼審查/迭代 (以及剩余的源碼)。
  • 對Pipeline進行審計追蹤。
  • Pipeline只有單一源,可被項目里的多個成員查看和編輯。

定義Pipeline的語法,無論是在web UI還是在 Jenkinsfile 文件中,都是相同的,不過通常認為,在 Jenkinsfile 中定義Pipeline,并納入源碼控制,是最佳實踐。

聲明式和腳本式Pipeline語法

Jenkinsfile 可用兩種語法進行編寫:聲明式和腳本式。

聲明式和腳本式的Pipeline,從根本上是不同的。聲明式Pipeline是Jenkins Pipeline新一些的特性:

  • 相比腳本式Pipeline語法,它提供更加豐富的語法特性
  • 是為了使讀寫Pipeline代碼更容易而設計的。

不過, Jenkinsfile 里很多單個的語法組件(或稱“步驟”),對于聲明式和腳本式Pipeline是通用的。

為何使用Pipeline

Jenkins本質上是一個自動化引擎,它支持許多自動化模式。Pipeline添加了一組強大的工具到Jenkins,支持從簡單的CI到復雜的CD Pipeline的用例。通過對一系列的相關任務進行建模,用戶可以利用Pipeline的很多特性:

  • 代碼:Pipeline是在代碼中實現的,通常會納入源碼控制,團隊有編輯、審查和迭代其交付Pipeline的能力。
  • 持久:Pipeline可以從Jenkins控制器的計劃和非計劃的重啟中存活下來。
  • 可暫停:Pipeline可以停止并等待人工輸入或批準,然后繼續運行Pipeline。
  • 多功能:Pipeline支持復雜的現實世界的CD需求,包括fork/join,循環, 并行工作。
  • 可擴展:Pipeline插件支持指定擴展到它的DSL,以及與其它插件集成的多個選項。

盡管Jenkins一直允許將自由式job鏈接到一起的初級形式來執行串行任務,Pipeline使這個概念成為了Jenkins的頭等公民。

構建在可擴展性這個核心Jenkins價值之上,Pipeline也可以擴展,用戶可使用Pipeline Shared Libraries,開發人員可使用插件來擴展。

下面的流程圖是一個CD場景的示例,在Jenkins Pipeline中很容易建模:

在這里插入圖片描述

Pipeline概念

Pipeline

Pipeline是CD pipeline的用戶自定義模型。Pipeline代碼定義了整個構建流程,通常包含了構建應用、測試和發布階段。

同時, pipeline 塊是聲明式Pipeline語法的重要部分。

Node

Node是一個機器,它是Jenkins環境的一部分,能夠執行Pipeline。

同時, node 塊是腳本式Pipeline語法的重要部分。

Stage

stage 塊定義了任務的概念上的不同子集,這些任務在整個Pipeline上被執行(比如:Build、Test和Deploy stage),很多插件用它來可視化或者展示Jenkins Pipeline狀態/進度。

Step

單個任務。本質上,step告訴Jenkins在一個特定的時間點上做什么(或者叫流程里的一步)。比如,要執行shell命令 make ,使用 sh step: sh 'make' 。當插件擴展Pipeline DSL,通常意味著檢查實現了一個新的step。

Pipeline語法概述

聲明式Pipeline

在聲明式Pipeline語法中, pipeline 塊定義了整個Pipeline要做的工作。

Jenkinsfile(聲明式Pipeline):

pipeline {agent anystages {stage('Build') {steps {//}}stage('Test') {steps {//}}stage('Deploy') {steps {//}}}
}

腳本式Pipeline

在腳本式Pipeline語法中,一個或多個 node 塊在整個Pipeline中做核心工作。盡管這不是腳本式Pipeline語法的強制需求,把Pipeline的工作限制在 node 塊中,做了兩件事:

  1. 通過向Jenkins隊列中添加一項,安排塊中包含的step運行。一旦node上的執行器空閑,該step就會運行。
  2. 創建workspace(某個Pipeline所特有的目錄),在此處工作在從源碼控制檢出的文件上。
    注意:取決于Jenkins配置,一些workspace在一段時間靜止(inactivity)后,可能不會自動清理。

Jenkinsfile(腳本式Pipeline):

node {stage('Build') {//}stage('Test') {//}stage('Deploy') {//}
}

Pipeline示例

Jenkinsfile(聲明式Pipeline):

pipeline {agent anyoptions {skipStagesAfterUnstable()}stages {stage('Build') {steps {sh 'make'}}stage('Test'){steps {sh 'make check'junit 'reports/**/*.xml'}}stage('Deploy') {steps {sh 'make publish'}}}
}

Jenkinsfile(腳本式Pipeline):

node {stage('Build') {sh 'make'}stage('Test') {sh 'make check'junit 'reports/**/*.xml'}if (currentBuild.currentResult == 'SUCCESS') {stage('Deploy') {sh 'make publish'}}
}

參考

  • https://www.jenkins.io/doc/book/pipeline
  • https://www.jenkins.io/zh/doc/book/pipeline (中文文檔)

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

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

相關文章

【Django】model模型—模型繼承

Django中三種繼承風格 抽象基類:僅將父類用于子類公共信息的載體,這樣的父類永遠都不會單獨使用。多表繼承:繼承了一個模型(可能來源其它應用),且想要每個模型都有對應的數據表。代理模型:只想…

JProfiler相關問題及答案(2024)

1、JProfiler是什么及其用途 JProfiler是一款功能豐富的商業Java性能剖析(profiling)工具,它主要面向開發者和性能分析師,用于監測和分析Java應用程序的運行時行為。以下是對JProfiler的一些詳細介紹和它的主要用途: …

webpack的一些知識

核心 webpack 是用來搭建前端工程的它運行在node環境中,它所做的事情,簡單來說,就是打包具體來說,就是以某個模塊作為入口,根據入口分析出所有模塊的依賴關系,然后對各種模塊進行合并、壓縮,形…

洛谷P1157 組合的輸出

深搜板子加一點點修改&#xff0c;適合初學者體會深搜&#xff0c;具體看代碼 題目鏈接 ACcode #include<bits/stdc.h>using namespace std;int a, b;bitset<50>vis;//剪枝 int d[50];void dfs(int x) {if (x b 1) {for (int i 1;i < b;i)cout << se…

HBM(High Bandwidth Memory)

選擇正確的高帶寬內存 構建高性能芯片的選擇越來越多&#xff0c;但附加內存的選擇卻幾乎沒有變化。為了在汽車、消費和超大規模計算中實現最大性能&#xff0c;選擇取決于一種或多種 DRAM&#xff0c;而最大的權衡是成本與速度。 盡管多年來人們一直在努力用更快、更便宜或更…

Linux:kubernetes(k8s)搭建mater節點(kubeadm,kubectl,kubelet)(2)

安裝k8有多種方式如&#xff1a; minikube kubeadm 二進制安裝 命令行工具 我這里就使用kubeadm進行安裝 環境 3臺centos7 master ip &#xff1a;192.168.113.120 2G運存 2內核 node1 ip &#xff1a;192.168.113.121 2G運存 2內核 node2 ip &#xff1a;192.168.1…

重構與設計模型的完美融合:構建穩定可擴展系統的關鍵步驟

在軟件開發的漫長旅程中&#xff0c;系統的穩定性和可擴展性一直是開發者們追求的目標。為了實現這一目標&#xff0c;重構和設計模型成為了不可或缺的兩個關鍵元素。本文將探討如何通過重構&#xff0c;使系統更穩定、更具可擴展性&#xff0c;并深入研究如何將重構與設計模型…

JavaEE:多線程(3):案例代碼

目錄 案例一&#xff1a;單例模式 餓漢模式 懶漢模式 思考&#xff1a;懶漢模式是否線程安全&#xff1f; 案例二&#xff1a;阻塞隊列 可以實現生產者消費者模型 削峰填谷 接下來我們自己實現一個阻塞隊列 1.先實現一個循環隊列 2. 引入鎖&#xff0c;實現線程安全 …

運用qsort函數進行快排并使用C語言模擬qsort

qsort 函數的使用 首先qsort函數是使用快速排序算法來進行排序的&#xff0c;下面我們打開官網來查看qsort是如何使用的。 這里有四個參數&#xff0c;首先base 是至待排序的數組的首元素的地址&#xff0c;num 是值這個數組的元素個數&#xff0c;size 是指每個元素的大小&am…

Python猜數字小游戲

下面這段代碼是一個簡單的數字猜測游戲&#xff0c;其中計算機已經提前計算出了414 // 23的結果并存儲在變量num中。然后&#xff0c;程序會提示用戶來猜測這個結果。 以下是代碼的主要步驟和功能&#xff1a; 初始化&#xff1a; num 414 // 23&#xff1a;計算414除以23的整…

Linux:各目錄含義

簡介 學習Linux各目錄含義之前&#xff0c;我們首先要了解一下Filesystem Hierarchy Standard&#xff08;文件系統層次結構標準&#xff09;。 FHS FHS&#xff0c;即文件系統層次結構標準&#xff08;Filesystem Hierarchy Standard&#xff09;&#xff0c;是Linux和類Un…

深入了解Redis:配置文件、動態修改和安全設置

Redis 是一個開源的內存中數據結構存儲系統&#xff0c;它可以用作數據庫、緩存和消息中間件。在使用 Redis 時&#xff0c;了解其配置選項是至關重要的。本文將詳細介紹 Redis 的配置文件和常用配置項&#xff0c;并提供一些示例來說明如何設置和修改這些配置。 Redis 配置文…

基于stm32F103的座面聲控臺燈

1.基本內容&#xff1a; 設計一個放置在桌面使用的臺燈&#xff0c;使用220v交流電供電。具備顯示屏能夠實時顯示日期&#xff08;年、月、日和星期&#xff09;&#xff0c;時間&#xff08;小時、分鐘、秒&#xff09;和溫度&#xff08;攝氏度&#xff09;&#xff1b;能夠通…

Python爬取天氣數據及可視化分析!(含源碼)

天氣預報我們每天都會關注&#xff0c;我們可以根據未來的天氣增減衣物、安排出行&#xff0c;每天的氣溫、風速風向、相對濕度、空氣質量等成為關注的焦點。本次使用python中requests和BeautifulSoup庫對中國天氣網當天和未來14天的數據進行爬取&#xff0c;保存為csv文件&…

帆軟下載PDF報錯java.lang.OutOfMemoryError: Java heap space

需求:前端選擇多條數據&#xff0c;點擊下載按鈕&#xff0c;下載帆軟報表的pdf格式。 &#xff08;目前用的是帆軟PDF下載接口&#xff0c;然后java轉成文件流&#xff0c;前端接到后端接口的文件流&#xff0c;使用axios下載blob,再創建下載鏈接&#xff0c;通過link標簽實現…

ArduinoTFTLCD應用

ArduinoTFTLCD應用 ArduinoTFTLCD應用硬件連接軟件導入庫顯示數字、字符顯示漢字方案1方案2 顯示圖片 總結 ArduinoTFTLCD應用 對于手工喜歡DIY的人來說&#xff0c;Arduino驅動的TFTLCD被很多人使用&#xff0c;此處就總結一下&#xff0c;使用的是VScode的PlatformIO插件驅動…

C# API異步方法和返回類型:提升應用程序性能和靈活性

摘要&#xff1a; 異步編程是現代應用程序開發中不可或缺的一部分。在C#中&#xff0c;異步方法允許我們在等待操作完成時繼續執行其他任務&#xff0c;從而提高應用程序的性能和響應性。本文將介紹C# API異步方法的基本概念、原理和實際應用&#xff0c;并詳細討論異步方法的返…

【機器學習】實驗5,AAAI 會議論文聚類分析

本次實驗以AAAI 2014會議論文數據為基礎&#xff0c;要求實現或調用無監督聚類算法&#xff0c;了解聚類方法。 任務介紹 每年國際上召開的大大小小學術會議不計其數&#xff0c;發表了非常多的論文。在計算機領域的一些大型學術會議上&#xff0c;一次就可以發表涉及各個方向…

RNA-Seq 筆記 [4]

***********************該筆記為初學者筆記&#xff0c;僅供個人參考謹慎搬運代碼****************************** samtools 排序壓縮和 featureCounts 生成基因計數表 SAM文件和BAM文件 1.SAM格式&#xff1a;是一種通用的比對格式&#xff0c;用來存儲reads到參考序列的比…

2024最新算法:鳑鲏魚優化算法(Bitterling Fish Optimization,BFO)求解23個基準函數(提供MATLAB代碼)

一、鳑鲏魚優化算法 鳑鲏魚優化算法&#xff08;Bitterling Fish Optimization&#xff0c;BFO&#xff09;由Lida Zareian 等人于2024年提出。鳑鲏魚在交配中&#xff0c;雄性和雌性物種相互接近&#xff0c;然后將精子和卵子釋放到水中&#xff0c;但這種方法有一個很大的缺…