在Jenkins Pipeline中獲取自上次成功構建后的文件變更

在Jenkins Pipeline中獲取自上次成功構建后的文件變更

背景

最近調整了一下項目的流水線,希望可以根據代碼文件的變更自動識別修改的模塊,從而進行相應服務的構建打包部署,簡單記錄一下。

具體實現

我們的項目是基于Maven多模塊的,隨著業務的發展,微服務模塊的數量也從幾個擴展到了十幾個,以前無腦構建所有服務的情況可能效率就會非常低了,所以需要獲取文件變更動態構建修改的微服務模塊。

一開始,我使用的是Git命令,獲取上次成功構建的GIT_COMMIT,然后進行比較獲取對應的文件變更,但是這種情況對于Merge Request的場景好像不適用,因為原分支多次push之后再MR,Git命令也就只能獲取最后的一次提交,之前的變更就撈不到,所以結果不是很準確。當然肯定有其他Git命令可以實現,我對于Git本身也不是那么熟練,后面就嘗試去找其他的方式。我這邊也貼一下具體的Pipeline腳本

pipeline {agent anyenvironment {// 定義其他環境變量}stages {stage('Detect Changes') {steps {script {// 獲取上次成功構建的GIT_COMMIT,這里假設你的Jenkins配置了Gitdef lastSuccessfulCommit = sh(script: "git rev-parse HEAD^1",returnStdout: true).trim()// 獲取自上次成功構建以來發生變動的文件列表def changedFiles = sh(script: "git diff --name-only $lastSuccessfulCommit HEAD",returnStdout: true).trim()// 解析文件路徑,決定需要構建的模塊def buildModules = []if (changedFiles.contains("module1")) {buildModules += 'module1'}if (changedFiles.contains("module2")) {buildModules += 'module2'}// 將需要構建的模塊列表存儲在環境變量中以便后續使用env.BUILD_MODULES = buildModules.join(',')echo "Modules to be built: ${env.BUILD_MODULES}"}}}// 其他階段stage('Build Modules') {when {expression {return env.BUILD_MODULES.contains('module1')}}steps {echo 'Building module1...'}}// 定義其他模塊的構建階段}
}

后面去Google搜索了一下其他人的做法,發現Jenkins本身是支持獲取上一次的變更文件列表的,參考了stackoverflow上面的寫法,具體實現如下

pipeline {agent anyenvironment {// 定義其他環境變量}stages {stage('Detect Changes') {steps {script {def changedFiles = "Changes:\n"build = currentBuildwhile(build != null && build.result != 'SUCCESS') {changedFiles += "In ${build.id}:\n"for (changeLog in build.changeSets) {for(entry in changeLog.items) {for(file in entry.affectedFiles) {changedFiles += "* ${file.path}\n"}}}build = build.previousBuild}echo changedFiles// 解析文件路徑,決定需要構建的模塊def buildModules = []if (changedFiles.contains("module1")) {buildModules += 'module1'}if (changedFiles.contains("module2")) {buildModules += 'module2'}// 將需要構建的模塊列表存儲在環境變量中以便后續使用env.BUILD_MODULES = buildModules.join(',')echo "Modules to be built: ${env.BUILD_MODULES}"}}}// 其他階段stage('Build Modules') {when {expression {return env.BUILD_MODULES.contains('module1')}}steps {echo 'Building module1...'}}// 定義其他模塊的構建階段}
}

參考

https://stackoverflow.com/questions/38084806/how-to-get-the-changes-since-the-last-successful-build-in-jenkins-pipeline

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

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

相關文章

Shell編程之數組

一.數組定義方法 1.數組名稱(數值1 數值2 數值3 數值4 數值5)數組名稱("字符串1" "字符串2" "字符串4" "字符串5" "字符串6")(或者使用單引號) 如何查看數組的元素&#xff1…

項目管理表格-項目總體計劃(項目管理-項目經理干貨資料Excel)

項目管理總體計劃模板 1、項目基本信息 2、項目里程碑 3、項目干系人 4、項目團隊組織架構管理 5、項目預算管理 6、項目項目任務計劃管理 7、問題及風險管理 8、項目周報 9、項目相關要求 軟件項目相關全套精華資料包獲取方式①:點我獲取 獲取方式②:本…

javaSE:類和對象

面向對象 java是一種面向對象的編程語言,面向對象就是把能為我們所用的東西直接拿來使用,省去中間過程,比如洗衣服,要完成這一個動作,我們本來需要一個盆,放水,放衣服,換水&#xf…

Hive的排序

order by 全局排序,因此只有一個reducer,設置了多個reducer也不起作用.-- 設置reducer的個數為2 set mapred.reduce.tasks2; -- 查詢 select * from user_install_status_limit order by uptime limit 10;order by 在hive.mapred.mode strict 模式下,必須指定 limit,否則執行…

Hive內部表(管理表)和外部表的區別

1、定義 Hive內部表:默認創建的表是內部表。hive完全管理表(元數據和數據)的聲明周期,類似于RDBMS的表。當刪除表時,他會刪除源數據以及表的元數據。 Hive外部表:外部表的數據不是Hive擁有或者管理的,只管…

三大國密瀏覽器簡單介紹-行云管家

國密瀏覽器是指支持國密算法SM2/SM3,支持基于國密算法的SSL協議,支持采用國密SSL證書實現HTTPS加密的網站正常訪問的瀏覽器。今天我們行云管家小編就給大家簡單介紹一下三大國密瀏覽器,以便大家了解。 三大國密瀏覽器簡單介紹-行云管家 1、密…

JavaScript的數據類型和運算符

JS的數據類型和運算符 1 JS的數據類型 1.1 數值類型 數值類型統一為 number,不區分整數和浮點數 1.2 字符串類型 字符串類型為 string 和JAVA中的String相似,JS中不嚴格區分單雙引號,都可以用于表示字符串 1.3 布爾類型 布爾類型為boolean 和Java中的boolean相似,但是在…

開源可視化表單服務商:提升自主研發 助力流程化辦公!

當前,做好流程化辦公可以為企業實現提質增效的辦公效果,助力企業進入數字化轉型。作為開源可視化表單服務商,流辰信息堅持研發創新理念,努力提升自主研發能力,專為廣大客戶朋友提供集產品、框架定制、產品交付為一體的…

【WEEK12】 【DAY2】整合Druid數據源【中文版】

2024.5.14 Tuesday 目錄 12.整合Druid數據源12.1.Druid簡介12.2.配置數據源12.2.1.添加Druid數據源依賴12.2.2.切換數據源12.2.3.運行Springboot04DataApplicationTests.java12.2.4.嘗試使用Druid數據源的專有配置12.2.5.導入Log4j 的依賴12.2.6.新建config文件夾12.2.7.修改測…

短視頻人設定位有哪些:四川京之華錦信息技術公司

短視頻人設定位有哪些:打造獨特魅力的關鍵 隨著短視頻平臺的興起,越來越多的內容創作者開始涌現,他們憑借各自獨特的魅力在網絡世界中嶄露頭角。而在這其中,一個成功的短視頻賬號背后,往往有一個清晰、鮮明的人設定位…

安卓APP+TCP+服務器端

1、在.xml文件中添加權限 <uses-permission android:name"android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name"android.permission.INTERNET"/>2、修改顯示界面 <?xml version"1.0" encoding"utf-8&…

短劇私域-快速引流變現

短劇的爆火&#xff0c;衍生出了很多周邊項目。 比如免費看劇App&#xff0c;短劇搜索機器人&#xff0c;短劇付費圈子等等。 這些項目的本質&#xff0c;就是借助短劇的熱度&#xff0c;把流量引到自己的魚塘進行變現。 短劇機器人大家都知道&#xff0c;目前最火的一種玩法…

【大數據面試題】27 講下Doris的物化視圖

一步一個腳印&#xff0c;一天一道面試題。 物化視圖概念 物化視圖&#xff0c;顧名思義&#xff0c;是將一個查詢的結果預先計算并存儲為物理表的形式。這意味著&#xff0c;原本需要在運行時動態執行的復雜查詢&#xff0c;現在變成了直接從已經計算好的結果表中讀取數據&a…

vue一個簡易時鐘

<template><div class"">時間{{ time }}<div class"base1"><div class"move-to-center line"></div><div class"move-to-center line line2"></div><div class"move-to-center lin…

單鏈表經典算法OJ題--牛客(環形鏈表的約瑟夫問題

鏈接&#xff1a;環形鏈表的約瑟夫問題_牛客題霸_牛客網【點擊即可跳轉】 著名的Josephus問題 據說著名猶太歷史學家 Josephus有過以下的故事&#xff1a; 在羅馬人占領喬塔帕特后&#xff0c;39 個猶太?與 Josephus及他的朋友躲到?個洞中&#xff0c;39個猶太?決定寧愿死也…

部標JT809開源(go版本)

GitHub - Yordroid/jt809_server: 部標809下級平臺&#xff0c;支持2011&#xff0c;2013,2019 歡迎大家給波星

網絡接口類型

第二天&#xff08;網絡、接口類型&#xff09; 網絡類型&#xff1a; 1、點到點&#xff1a;在一個網段內只能存在&#xff0c;兩個物理節點 MA --- 多路訪問 -- 在一個網段內物理節點的數量不限制 MA --- BMA NBMA 2、BMA --- 廣播型多路訪問 3、NBMA --- 非廣播型多路…

智能魚缸-設計說明書

設計摘要&#xff1a; 本論文以STC89C52單片機為核心控制器&#xff0c;構建了一套智能魚缸系統。該系統由中控部分、輸入部分和輸出部分組成。中控部分采用STC89C52單片機&#xff0c;負責獲取輸入部分數據并進行處理&#xff0c;控制輸出部分。輸入部分包括TDS水質水溫檢測模…

MySQL:查詢一個由逗號分隔的字符串數組,并檢查其中指定元素是否等于某個值

使用SUBSTRING_INDEX函數 SELECT * FROM TABLE_NAME WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(status, ,, 2), ,, -1) 1SUBSTRING_INDEX()函數 用于提取字符串中的子字符串。函數有三個參數&#xff1a; 第一個參數是源字符串&#xff0c;這是您要從中提取子字符串的字符串。…

Axure RP移動端交互元件庫/交互原型模板

作品類型&#xff1a;元件庫/原型模板 更新日期&#xff1a;2023-12-04 當前版本&#xff1a;V1.3 適用范圍&#xff1a;App應用/小程序 Axure版本&#xff1a;Axure 9.0均可打開 文件大小&#xff1a;36.7M 歷時兩個月制作并整理了手機移動端常用的75種組件、90個常用界面模板…