【jenkins】自动修改工程版本号 以及 父pom版本号 (maven-release-plugin)

2024-05-24 21:08

本文主要是介绍【jenkins】自动修改工程版本号 以及 父pom版本号 (maven-release-plugin),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前介绍过使用versions-maven-plugin,maven-scm-plugin以及maven-release-plugin来管理工程的版本号以及依赖的版本号。这些maven插件已经帮助我们最大程度上解决了多项目多模块的版本问题。但是仍然不够智能,我们仍然需要执行若干maven命令,这里介绍下使用jenkins实现完全自动化更新版本的方法。

 

这里会有两个工程,一个是root-pom,一个是普通的工程。普通工程完成一版迭代,push代码,然后使用一个jenkins的job来发包,同时出发一个root-pom的job,自动修改其中的dependencyManagement,其他工程就能拉取到最新的版本。

普通工程:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.liyao</groupId><artifactId>testRoot</artifactId><version>1.0-SNAPSHOT</version></parent><scm><developerConnection>scm:git:https://github.com/miracle2138/testJenkins.git</developerConnection><tag>HEAD</tag></scm><groupId>com.liyao</groupId><artifactId>testJenkins</artifactId><version>1.32-SNAPSHOT</version><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId></plugin></plugins></build></project>

然后建一个jenkins的job:

1)执行shell脚本为:

echo "testJenkins 开始构建"#切换分支,否则后面使用release插件会报错
git checkout master
#release prepare修改当前工程版本号
mvn -DignoreSnapshots=true release:clean release:prepare#取出当前release版本号
git tag | xargs -I {} git tag -d {}
git pull origin master --rebase --tagreleaseVersion=$(git tag | sed  "s/[a-z|A-Z]*-//g" | sort -nr | head -1)echo "release版本 ${releaseVersion}"#发包
mvn release:perform#将release版本号传递给rootpom的job
echo version=${releaseVersion} > releaseInfo.txt
echo "testJenkins 构建结束"

传递版本号是通过release插件提交git时打的tag实现的。

2)构建后的操作:

这里需要安装一个Parameterized Trigger plugin,然后将工程名和版本号传递给下一个工程。

因为工程名是固定的,所以使用predefinded parameters,该该方式只能传递值,而非变量,无法在构建中修改值。

如果要在构建中修改,可以使用properties file方式传递,在脚本中将变量值写入文件,通过文件传递。

另外,后面的工程想要使用这些传递的变量,必须定义参数化构建来接受参数。

 

root-pom工程:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.liyao</groupId><artifactId>testRoot</artifactId><!--版本固定为这个--><version>1.0-SNAPSHOT</version><packaging>pom</packaging><scm><developerConnection>scm:git:https://github.com/miracle2138/testRootPom.git</developerConnection></scm><properties><testJenkins.version>1.32</testJenkins.version></properties><dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>com.liyao</groupId><artifactId>testJenkins</artifactId><version>${testJenkins.version}</version></dependency></dependencies></dependencyManagement><build><pluginManagement><!-- lock1r down p4lugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><version>2.5.3</version><configuration><autoVersionSubmodules>true</autoVersionSubmodules></configuration></plugin></plugins></pluginManagement></build><distributionManagement><repository><id>release_user</id><name>Release Deploy</name><url>http://localhost:8081/repository/maven-releases/</url></repository><snapshotRepository><id>snapshot_user</id><name>Snapshot Deploy</name><url>http://localhost:8081/repository/maven-snapshots/</url></snapshotRepository></distributionManagement>
</project>

jenkins的job:

1)执行脚本:

echo “开始更新root-pom”git checkout master
git pull origin master --rebasename=${dependency_name}
version=${version}
echo "更新的依赖名称 ${name}"
echo "更新版本 ${version}"property="${name}.version"
mvn versions:set-property -Dproperty=${property} -DnewVersion=${version}mvn scm:checkin -Dmessage="update dependency ${dependency_name}: ${version}"
mvn clean deployecho “更新root-pom结束”

2)参数:

 

项目配置就是这样。

 

执行:

假设现在版本号为1.32-SNAPSHOT,做了开发,push了代码,点击”立即构建“来发包。

[INFO] --- maven-release-plugin:2.5.3:prepare (default-cli) @ testJenkins ---
+ releaseVersion=1.33 + echo 'release版本 1.33' release版本 1.33 + mvn release:perform 
[INFO] Scanning for projects...
[INFO] 
[INFO] -----------------------< com.liyao:testJenkins >------------------------
[INFO] Building testJenkins 1.34-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
+ echo 'testJenkins 构建结束'
testJenkins 构建结束
[parameterized-trigger] Current build has no parameters.
触发新的构建 root-pom
Finished: SUCCESS

可以看到当前工程发包正常,且修改了工程版本,并触发了root-pom的job。

git log一下:

commit 703d15c8dcd7f7eb848a6d34f60ac4792bed8ae1 (HEAD -> master, origin/master)
Author: miracle2138 <454684579@qq.com>
Date:   Sun May 26 23:37:27 2019 +0800

    [maven-release-plugin] prepare for next development iteration

commit 45aa0eafb21fd1e1109f45f0e0da994102390c8d
Author: miracle2138 <454684579@qq.com>
Date:   Sun May 26 23:37:17 2019 +0800

    [maven-release-plugin] prepare release testJenkins-1.33
版本已经修改。

 

再看下触发的root-pom的执行:

+ name=testJenkins
+ version=1.33
+ echo '更新的依赖名称 testJenkins'
更新的依赖名称 testJenkins
+ echo '更新版本 1.33'
更新版本 1.33
+ property=testJenkins.version
+ mvn versions:set-property -Dproperty=testJenkins.version -DnewVersion=1.33
[INFO] Scanning for projects...
+ mvn scm:checkin '-Dmessage=update dependency testJenkins: 1.33'
[INFO] Scanning for projects...
+ mvn clean deploy
[INFO] Scanning for projects...
[INFO] 
[INFO] -------------------------< com.liyao:testRoot >-------------------------
[INFO] Building testRoot 1.0-SNAPSHOT

root-pom的版本也修改了并且deploy。

 

这篇关于【jenkins】自动修改工程版本号 以及 父pom版本号 (maven-release-plugin)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/999533

相关文章

C++工程编译链接错误汇总VisualStudio

目录 一些小的知识点 make工具 可以使用windows下的事件查看器崩溃的地方 dumpbin工具查看dll是32位还是64位的 _MSC_VER .cc 和.cpp 【VC++目录中的包含目录】 vs 【C/C++常规中的附加包含目录】——头文件所在目录如何怎么添加,添加了以后搜索头文件就会到这些个路径下搜索了 include<> 和 include"" WinMain 和

WordPress网创自动采集并发布插件

网创教程:WordPress插件网创自动采集并发布 阅读更新:随机添加文章的阅读数量,购买数量,喜欢数量。 使用插件注意事项 如果遇到404错误,请先检查并调整网站的伪静态设置,这是最常见的问题。需要定制化服务,请随时联系我。 本次更新内容 我们进行了多项更新和优化,主要包括: 界面设置:用户现在可以更便捷地设置文章分类和发布金额。代码优化:改进了采集和发布代码,提高了插件的稳定

【青龙面板辅助】JD商品自动给好评获取京豆脚本

1.打开链接 开下面的链接进入待评价商品页面 https://club.jd.com/myJdcomments/myJdcomments.action?sort=0 2.登陆后执行脚本 登陆后,按F12键,选择console,复制粘贴以下代码,先运行脚本1,再运行脚本2 脚本1代码 可以自行修改评价内容。 var content = '材质很好,质量也不错,到货也很快物流满分,包装快递满

开启青龙 Ninja 扫码功能失效后修改成手动填写CK功能【修正Ninja拉库地址】

国内:进入容器docker exec -it qinglong bash #获取ninjagit clone -b main https://ghproxy.com/https://github.com/wjx0428/ninja.git /ql/ninja#安装cd /ql/ninja/backend && pnpm install cp .env.example .env

vscode-创建vue3项目-修改暗黑主题-常见错误-element插件标签-用法涉及问题

文章目录 1.vscode创建运行编译vue3项目2.添加项目资源3.添加element-plus元素4.修改为暗黑主题4.1.在main.js主文件中引入暗黑样式4.2.添加自定义样式文件4.3.html页面html标签添加样式 5.常见错误5.1.未使用变量5.2.关闭typescript检查5.3.调试器支持5.4.允许未到达代码和未定义代码 6.element常用标签6.1.下拉列表

工程文档CAD转换必备!在 Java 中将 DWG 转换为 JPG

Aspose.CAD 是一个独立的类库,以加强Java应用程序处理和渲染CAD图纸,而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG, DWT, DWF, DWFX, IFC, PLT, DGN, OBJ, STL, IGES, CFF2文件、布局和图层高质量地转换为PDF和光栅图像格式。 Aspose API支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格

AI炒股:自动画出A股股票的K线图并添加技术指标

在deepseek中输入提示词: 你是一个Python编程专家,要完成一个编写Python脚本的任务,具体步骤如下: 用AKShare库获取股票贵州茅台(股票代码:600519)在2024年3月7日到2024年6月5日期间的历史行情数据-前复权。 然后绘制K线图,并在K线图上添加布林线、MACD 注意: 每一步都要输出信息到屏幕上; 日期格式是YYYYMMDD; 设置中文字体,以解决

XMG 自动提示宏 #define keyPath(objc,keyPath) @(((void)objc.keyPath,#keyPath));

1. int a=((void)5,4)  C语言逗号表达式默认会取右边的内容 如果不写void的话 a会被报警告,写上void标明请忽略左边的内容 插曲刚才弄得,已经上线的苹果产品如果需要下架的话,点击 价格与销售范围,然后点击下架。这个产品就会在AppStore 中移除。如果想再让改产品重新在Apple store中显示,那么再次让他上线就可以了。但是会有一定的时间延迟 /

最新版本的MySQL的下载和安装(Release: 8.0.12)

1.打开百度搜索【Myql】,或直达官网https://dev.mysql.com/ 2.点选【Download按钮】,跳转到下载页面,拉到底部再点选【Community Download】社区版[免费版]