Jenkins 多分支管道

如果您正在尋找一個基于拉取請求或分支的自動化 Jenkins 持續集成和交付 (CI/CD) 流水線,本指南將幫助您全面了解如何使用 Jenkins 多分支流水線實現它。

Jenkins 的多分支流水線是設計 CI/CD 工作流的最佳方式之一,因為它完全基于 git(源代碼管理)的流水線即代碼。本指南將討論 Jenkins 多分支流水線設置中涉及的所有關鍵概念。

多分支流水線是如何工作的?


我將帶您了解一個基于 git-flow 的基本構建和部署工作流程,以便更好地理解多分支流水線。本例中提供的分支策略僅供參考。

假設我想要一個 Jenkins 流水線來構建和部署一個應用程序,并滿足以下條件。

  1. 應用程序倉庫有兩個分支(主分支和開發分支)。
  2. 開發從開發人員分叉應用程序倉庫并在分叉的倉庫中創建一個分支開始。開發人員將代碼提交到功能分支。代碼在本地測試完畢并準備好集成后,他們將從分叉的倉庫向主倉庫的開發分支提交一個 PR。
  3. 每當開發人員從分叉倉庫的功能分支向開發分支提交 PR 時,Jenkins 流水線都會觸發合并源分支和目標分支的操作??,然后運行單元測試和靜態代碼分析。我們稱之為 PR 構建。
  4. 代碼通過 PR 構建中的測試后,開發人員或審閱者將 PR 合并到開發分支。
  5. 代碼合并到開發分支后,應該觸發一個流水線,該流水線將運行相關測試并將代碼部署到相關環境(例如,開發、質量保證等)。
  6. 當代碼準備好發布時,開發人員會從開發分支向主分支提交 PR。這將觸發一個 PR 構建流水線,該流水線將合并源分支和目標分支、運行單元測試、執行代碼分析、構建工件(Docker 鏡像、jar 文件等)、進行漏洞測試等。
  7. 如果測試通過,PR 將被審核并合并到主分支。
  8. 合并完成后,Jenkins 應該觸發一個構建,該構建將編譯代碼、創建發布工件并將其部署到暫存環境和預生產環境。

從以上情況可以看出,Jenkins 作業無需手動觸發,每當有分支的拉取請求時,流水線都需要自動觸發并運行該分支所需的步驟。

此工作流程為工程師構建了良好的反饋循環,避免了依賴 DevOps 團隊在非生產環境中進行構建和部署。

開發人員可以在 Github 上查看構建狀態,并決定下一步操作。

此工作流程可以通過 Jenkins 多分支流水線輕松實現。

下圖展示了上述示例構建過程的多分支流水線工作流程。

多分支流水線的工作原理如下。

  1. 當開發者從 fork 倉庫的功能分支創建 PR 以開發分支時,Github 會向 Jenkins 發送一個包含 PR 信息的 Webhook。
  2. Jenkins 接收 PR 并找到相關的多分支流水線,然后自動創建 PR 構建流水線。然后,它會按照 Jenkinsfile 中提到的步驟運行作業。在簽出 (checkout) 期間,PR 中的源分支和目標分支會被合并。PR 合并將在 Github 上被阻止,直到 Jenkins 返回構建狀態(如果已配置 Github 規則集)。
  3. 構建完成后,Jenkins 會將狀態更新為 Github PR。現在,您可以合并代碼了。如果您想查看 Jenkins 構建日志,可以在 PR 狀態中找到 Jenkins 構建狀態和日志鏈接(如果已配置 Github App forJenkins)

首先,在使用多分支流水線之前,我使用了一個簡單的流水線,并結合了 GitHub Webhook。

我遇到的問題是,我團隊的項目使用 Git 工作流作為開發分支,當我或我的團隊推送或合并 PR 時,Webhook 會向我的 Jenkins 流水線發送請求,無論哪個分支,該請求都會立即啟動工作。因此,多分支流水線可以幫助解決這個問題。

多分支流水線 Jenkinsfile


在開始實現之前,讓我們先看一下可以在流水線中使用的多分支流水線 Jenkins 示例 Jenkinsfile。

要使多分支流水線正常工作,您需要在 SCM 倉庫中擁有 Jenkinsfile。

如果您正在學習/測試,可以使用下面提供的多分支流水線 Jenkinsfile。它包含一個檢出階段和其他虛擬階段,用于回顯消息。

注意:將代理標簽 agent-01 替換為您的 Jenkins 代理名稱。
pipeline {agent {node {label 'agent-01'}}options {buildDiscarder logRotator( daysToKeepStr: '16', numToKeepStr: '10')}stages {stage('Cleanup Workspace') {steps {cleanWs()sh """echo "Cleaned Up Workspace For Project""""}}stage('Code Checkout') {steps {checkout([$class: 'GitSCM', branches: [[name: '*/main']], userRemoteConfigs: [[url: 'https://github.com/spring-projects/spring-petclinic.git']]])}}stage('Unit Testing') {steps {sh """echo "Running Unit Tests""""}}stage('Code Analysis') {steps {sh """echo "Running Code Analysis""""}}stage('Deploy To Dev & QA') {when {branch 'develop'}steps {sh """echo "Building Artifact for Dev Environment""""sh """echo "Deploying to Dev Environment""""sh """echo "Deploying to QA Environment""""}}stage('Deploy To Staging and Pre-Prod Code') {when {branch 'master'}steps {sh """echo "Building Artifact for Staging and Pre-Prod Environments""""sh """echo "Deploying to Staging Environment""""sh """echo "Deploying to Pre-Prod Environment""""}}}   
}

創建多分支流水線
?

步驟 1:在 Jenkins 主頁創建一個“新項目”。

Jenkins 新項目 - 多分支


步驟 2:從選項中選擇“多分支流水線”,然后點擊“確定”。

步驟 3:點擊“添加源”,然后選擇 Github。

步驟 4:在“憑據”字段下,選擇 Jenkins,并使用您的 Github 用戶名和密碼創建憑據。

步驟 5:選擇已創建的憑據,并提供您的 Github 倉庫以驗證憑據,如下所示。驗證多分支流水線憑據


步驟 6:在“行為”下,選擇符合您需求的選項。您可以選擇發現倉庫中的所有分支,也可以僅發現包含拉取請求的分支。

您可以從“添加”按鈕中選擇其他行為。

例如,如果您選擇不發現代碼庫中的所有分支,則可以選擇正則表達式或通配符方法來發現代碼庫中的分支,如下所示。

步驟 7:如果您選擇為 Jenkinsfile 設置不同的名稱,可以在構建配置中指定。

在“腳本路徑”選項中,您可以提供所需的名稱。請確保 Jenkinsfile 存在于代碼庫中,并且名稱與您在流水線配置中提供的名稱相同。

另外,啟用“丟棄舊構建”以僅保留所需的構建日志,如下所示。

步驟 8:保存所有作業配置。

Jenkins 會根據我們的配置掃描已配置的 Github 倉庫,查找所有分支和 PR 請求。

下圖展示了掃描三個分支的作業。由于我尚未發起任何拉取請求,因此 Jenkins 不會創建任何基于分支的流水線。我將演示如何在設置 Webhook 后測試自動創建流水線。

步驟1: 登錄github, 找到repo,點擊設置,添加webhook,輸入你的jenkins 的URL

您應該會在成功的 Webhook 配置上看到一個綠色勾號,如下所示。Jenkins - Github Webhook 交付成功


如果您沒有看到綠色勾號或警告標志,請點擊 Webhook 鏈接,向下滾動到“最近交付”,然后點擊最后一個 Webhook。您應該能夠通過狀態代碼查看 Webhook 交付失敗的原因。

現在,我們已經完成了多分支流水線所需的所有配置。下一步是測試多分支流水線工作流觸發器。

測試多分支流水線


我使用的這個倉庫有兩個分支:main 和 develop。

更新 develop分支中 README 文件的部分內容,并向 main 提交 PR。您也可以從 fork 的倉庫中執行此操作。

它會向 Jenkins 發送一個 Webhook,并為提交的 PR 創建流水線并開始構建。

現在,如果您檢查 Jenkins,您會在 Jenkins 中找到一個用于 PR 的流水線,如下所示。

如果構建失敗,您可以將更改提交到開發分支,只要 PR 處于打開狀態,它就會觸發 PR 流水線。

我在 Jenkinfile 中添加了一個條件:如果分支是開發分支,則跳過部署階段;如果是 PR 構建分支,則跳過主分支。您可以在 Jenkins 構建階段中檢查這一點。如果您檢查這些階段,可以清楚地看到跳過的部署階段,如下所示。

啟用拉取請求狀態檢查


在多分支流水線中,您可以啟用狀態檢查。這意味著 Jenkins 會將結果以狀態檢查的形式報告給 GitHub。它會顯示在 PR 頁面上,如下所示。

例如,開發人員可能需要進行以下狀態檢查。

常見的狀態檢查可能包括:

  • 構建驗證
  • 單元測試
  • 代碼風格檢查
  • 安全掃描

要在 Github PR 中啟用這些狀態檢查,您需要創建一個適用于 Jenkins 的 Github App。

您可以按照 Github App for Jenkins 詳細指南進行創建。

然后在多分支流水線配置中,您需要使用 Github App 憑據,而不是用戶名和密碼。

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

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

相關文章

跨境電商管理轉型:日事清通過目標管理、流程自動化助力智優美科技項目管理升級與目標落地復盤

1.客戶背景介紹 深圳市智優美科技有限公司是一家專業從事外貿B2C的電子商務公司,公司總部位于深圳市寶安區,旗下擁有三家子公司。目前銷售的品類有:家居用品、電子產品、電子配件產品等,在深圳外貿電商行業銷售額穩居行業前10名。…

基于Docker+k8s集群的web應用部署與監控

項目架構圖 server ip master 192.168.140.130 node1 192.168.140.131 node2 192.168.140.132 ansible 192.168.140.166 jumpserver 192.168.100.133 firewall 192.168.1.86 nfs 192.168.140.157 harbor 192.168.140.159 Promethethus 192.168.140.130 Jen…

量子計算與經典計算融合:開啟計算新時代

一、引言 隨著科技的飛速發展,計算技術正迎來一場前所未有的變革。量子計算作為前沿技術,以其強大的并行計算能力和對復雜問題的高效處理能力,吸引了全球科技界的關注。然而,量子計算并非要完全取代經典計算,而是與經典…

【HarmonyOS 5】makeObserved接口詳解

【HarmonyOS 5】makeObserved接口詳解 一、makeObserved接口是什么? makeObserved 接口(API version 12 起可用)用于將非觀察數據轉為可觀察數據,適用于三方包類、Sendable 裝飾的類、JSON.parse 返回的對象、collections.Array…

豆瓣圖書數據采集與可視化分析(二)- 豆瓣圖書數據清洗與處理

文章目錄 前言一、查看數據基本信息二、拆分pub列三、日期列處理四、價格列處理五、出版社列處理六、評價人數列處理七、缺失值處理八、重復數據處理九、異常值處理十、完整代碼十一、清洗與處理后的數據集展示 前言 豆瓣作為國內知名的文化社區,擁有龐大且豐富的圖…

Wasm -WebAssembly簡介

WebAssembly 是什么? WebAssembly/wasm WebAssembly 或者 wasm 是一個可移植、體積小、加載快并且兼容 Web 的全新格式 WebAssembly(簡稱 Wasm)是一種二進制指令格式,設計用于在現代 Web 瀏覽器中高效運行程序。它可以被認為是一…

驅動開發硬核特訓 · Day 15:電源管理核心知識與實戰解析

在嵌入式系統中,電源管理(Power Management)并不是“可選項”,而是實際部署中影響系統穩定性、功耗、安全性的重要一環。今天我們將以 Linux 電源管理框架 為基礎,從理論結構、內核架構,再到典型驅動實戰&a…

【SpringBoot】99、SpringBoot中整合RabbitMQ實現重試功能

最近在做一個項目,需要使用 MQ 實現重試功能,在這里給各位分享一下。 1、整合 RabbitMQ <!-- rabbitmq消息隊列 --> <dependency><groupId>org.springframework.boot</groupId><

AI 中的 CoT 是什么?一文詳解思維鏈

文章目錄 CoT 的組成CoT 的作用CoT 的推理結構變體CoT 的特點CoT 的適用場景總結 在人工智能領域&#xff0c;尤其是自然語言處理和機器學習中&#xff0c;有一種名為思維鏈&#xff08;Chain of Thought&#xff0c;CoT&#xff09;的技術&#xff0c;它正逐漸改變著我們對 AI…

Vue3集成Element Plus完整指南:從安裝到主題定制上

一、Element Plus簡介 Element Plus是一套基于Vue 3.0的桌面端組件庫&#xff0c;由餓了么前端團隊開源維護。它提供了豐富的UI組件&#xff0c;能夠幫助開發者快速構建企業級中后臺產品。 1. 安裝與卸載 bash 復制 下載 # 安裝最新版本 npm install element-plus -S# 卸…

Java29:Spring MVC

一&#xff1a;Springmvc簡介 1.簡介&#xff1a; Spring Web MVC 是基于Servlet API構建的原始Web框架&#xff0c;從一開始就包含在Spring Framework中。正式名稱“Spring Web MVC” 來自其源模塊名稱&#xff08;spring-webmvc&#xff09;但它通常被稱為“Spring Mvc” …

VLC搭建本機的rtsp直播推流和拉流

媒體---流---捕獲設備&#xff0c;選擇攝像頭&#xff0c;點擊串流 x下一步 選擇rtsp&#xff0c;點擊添加 看到了端口&#xff0c;并設置路徑&#xff1a; 選擇Video -H 264 mp3(TS) 點擊下一個&#xff0c; 點擊流&#xff0c;就開始推流了 拉流&#xff0c;觀看端&#x…

云點數據讀寫

一、常見點云數據格式 LAS/LAZ格式 LAS是點云數據的行業標準格式 LAZ是LAS的壓縮版本 支持地理參考信息、顏色、強度等屬性 PCD格式(Point Cloud Data) PCL(Point Cloud Library)開發的格式 支持ASCII和二進制存儲 包含頭部信息和數據部分 PLY格式(Polygon File Format…

[RHEL8] 指定rpm軟件包的更高版本模塊流

背景&#xff1a;掛載RHEL ISO使用kickstart安裝操作系統&#xff0c;安裝包未指定安裝perl&#xff0c;但是安裝完可以查到其版本&#xff0c;且安裝的是ISO中多個版本中的最低版本。 原因&#xff1a;&#xff08;1&#xff09;為什么沒有裝perl&#xff0c;perl -v可以看到版…

Spring 事務管理核心機制與傳播行為應用

Spring 事務詳解 一、Spring 事務簡介 Spring 事務管理基于 AOP&#xff08;面向切面編程&#xff09;實現&#xff0c;通過 聲明式事務&#xff08;注解或 XML 配置&#xff09;統一管理數據庫操作&#xff0c;確保數據一致性。核心目標&#xff1a;保證多個數據庫操作的原子…

JavaScript解密實戰指南:從基礎到進階技巧

JavaScript加密技術廣泛應用于數據保護、反爬蟲和代碼混淆&#xff0c;但掌握解密方法能幫助開發者突破技術壁壘。本文結合爬蟲實戰與安全分析場景&#xff0c;系統梳理JS解密的核心方法與工具。 一、基礎解密方法 1. Base64解碼 適用于簡單編碼場景&#xff0c;如Cookie加密…

WEMOS LOLIN32

ESP32是結合Wi-Fi和藍牙的32位元系統單晶片&#xff08;SoC&#xff09;與外接快閃記憶體的模組。許多廠商生產採用ESP32模組的控制板&#xff0c;最基本的ESP控制板包含ESP32模組、直流電壓轉換器和USB序列通訊介面IC。一款名為WEMOS LOLIN32的ESP32控制板具備3.7V鋰電池插座。…

俄羅斯方塊-簡單開發版

一、需求分析 實現了一個經典的俄羅斯方塊小游戲&#xff0c;主要滿足以下需求&#xff1a; 1.圖形界面 使用 pygame 庫創建一個可視化的游戲窗口&#xff0c;展示游戲的各種元素&#xff0c;如游戲區域、方塊、分數等信息。 2.游戲邏輯 實現方塊的生成、移動、旋轉、下落和鎖…

使用安全繼電器的急停電路設計

使用安全繼電器的急停電路設計 一&#xff0c;急停回路的設計1&#xff0c;如何將急停接到線路當中&#xff1f;2&#xff0c;急停開關 如何接到安全繼電器中 一&#xff0c;急停回路的設計 急停是每一個設備必不可少的部分&#xff0c;因為關乎安全&#xff0c;所以說所以說他…

【讀書筆記·VLSI電路設計方法解密】問題64:什么是芯片的功耗分析

低功耗設計是一種針對VLSI芯片功耗持續攀升問題的設計策略。隨著工藝尺寸微縮&#xff0c;單顆芯片可集成更多元件&#xff0c;導致功耗相應增長。更嚴峻的是&#xff0c;現代芯片工作頻率較二十年前大幅提升&#xff0c;而功耗與頻率呈正比關系。因此&#xff0c;芯片功耗突破…