文章目录

  • 一、场景介绍
  • 二、插件安装
  • 三、插件配置
  • 四、缺陷说明

一、场景介绍

  在项目开发过程中,项目版本号的管理和维护对于开发人员来说是一个非常不愿意去维护的事情。特别是微服务盛行的今天,子模块独立开发,子模块独立升级。各种版本之间的交叉并行,老虎、老鼠、傻傻分不清楚。

  不同的企业对项目的版本管理有不同的规定,我们应该根据不同的需求去指定版本管理流程。本次主要以每一次的 Jenkins 编译为一个版本号为例,来阐述采用 Version Number Plug 做版本管理的实现细节。

  在实践过程中遇到一个问题,就是每次采用 Jenkins 编译 pom.xml 的时候,Version Number Plug 的版本号总会比 build 出来的 jar 项目大一个版本号,网上寻觅出来的原因是因为在采用 Jenkins 构建编译的时候,Jenkins 会将 pom.xml 先加载到内存中,然后通过 setversion 命令进行版本设置,但是实际打包的时候,还是读取的内存中的 pom.xml 文件导致。目前还没有找到合适的解决方案,希望广大嫖友集思广益,为我解决这个问题,在此谢过~!

二、插件安装

  1. Jenkins 的插件管理中安装 Version Number 插件

  2. 重启 Jenkins 服务,使该插件为 Jenkins 服役

三、插件配置

  1. 找到需要采用该插件进行版本管理的项目模块 → 配置 → 构建环境

    P.S

    Jenkins 中直接调用 Shell 脚本中调用 echo ${BUILD_VERSION} 查看版本的效果是否和自己的预设一致。

  2. 构建设置

    pom.xml# ${BUILD_VERSION} 获取上一步骤的版本号,采用该版本号进行打包(但是存在文档开头说到的坑)
    versions:set -DnewVersion=${BUILD_VERSION} clean compile install -Dmaven.test.skip=true
    

    此坑的解释

    解决此坑的办法应该是在上面的命令行中,如何设置两次执行构建打包的 mvn 命令即刻解决,但是笔者才疏学浅,暂时没有想到好的方案。

  3. 构建效果

  4. 参数说明

    变量名称 功能说明
    BUILD_DATE_FORMATTED 如果此参数是用引号硬起来的 JAVA 日期格式字符串,则它将替换为以该字符串格式设置的构建日期。
    如果没有参数,则将是标准简单的日期格式。如:{BUILD_DATE_FORMATTED,“yyyy-MM-dd”}
    BUILD_DAY 没有参数,它只是返回构建的一天作为一个整数。如果有一个参数,它需要参数中的字符数,
    并使用填充日期字符串。例如,如果是本月的第三天,$ {BUILD_DAY}将返回3,
    BUILDDAY,X将返回3,{BUILD_DAY,X}将返回3,BUILDD​AY,X将返回3,{BUILD_DAY,XX}将返回03。
    BUILD_WEEK 返回BUILD_DAY的相同参数约定
    BUILD_MONTH 返回月份,使用与BUILD_DAY相同的参数约定
    BUILD_YEAR 返回BUILD_DAY的相同参数约定
    BUILDS_TODAY 返回今天发生的构建的数量,包括这个。这在午夜重置。参数约定与BUILD_DAY相同
    BUILDS_THIS_WEEK 返回本周发生的构建数量,包括这一个。这在一周的开始重置。参数约定与BUILD_DAY相同
    BUILDS_THIS_MONTH 返回本月发生的构建数量,包括这一个。这在本月的第一个月重置。参数约定与BUILD_DAY相同
    BUILDS_THIS_YEAR 返回今年发生的构建数量。这在今年的第一个重置。参数约定与BUILD_DAY相同。
    BUILDS_ALL_TIME 返回自项目开始以来发生的构建数量。这与hudson内部版本号不同,因为它可以定期重置
    (例如,从1.0.BUILDSALLTIME移到2.0.{BUILDS_ALL_TIME}移到2.0.BUILDSA​LLT​IME移到2.0.{BUILDS_ALL_TIME},
    并且可以配置为以任意数字开始而不是标准开始日期。
    MONTHS_SINCE_PROJECT_START 自项目开始日期以来的月数。这严格依赖于当前版本的月份和项目开始日期的月份;
    如果项目在10月31日开始,并且构建在11月1日,
    那么这将返回1.如果项目从10月1日开始,
    并且构建在11月30日,这也将返回1.参数约定与BUILD_DAY相同。
    YEARS_SINCE_PROJECT_START 项目开始日期以来的年数。像MONTHS_SINCE_PROJECT_START一样,这仅取决于年份;
    其他 在$ {}中包含的任何其他参数被替换为具有相同名称的环境变量(如果有的话),
    或者失败,则被忽略。例如,这可以用来集成源代码控制版本号。

四、缺陷说明

  如文章开头所说,每次构建出来的版本都会小于 Version Number 插件设置的版本,原因在于在 Jenkins 中执行 mvn 打包脚本的时候,将 pom.xml 结构加载到了内存,所以,通过命令修改版本号的时候,确实是将版本配置到了 pom.xml 文件中,但是在 package 的时候拿的还是内存中的 pom.xml 文件,具体请看此处解释。

  如果在 Jenkins 的构建中执行 mvn 可以分开执行,就可以解决这个问题了。目前还没有找到合适的解决方案,希望广大嫖友集思广益,为我解决这个问题,在此谢过~!

Jenkins 通过 Version Number Plug 优雅的生成项目版本号相关推荐

  1. (十五)Alian 的 Spring Cloud 自动生成项目

    目录 一.创建 1.1.第一步 二.mvn命令 三.生成项目 3.1.配置 3.1.属性配置 3.2.控制层 3.3.服务层 四.验证 4.1.请求生成项目 4.2.生成项目结果 4.3.项目结构 一 ...

  2. 解决java.lang.UnsupportedClassVersionError: Bad version number in .class file问题

    在启动tomcat服务器时, 报如下的错误: org.springframework.beans.factory.CannotLoadBeanClassException: Error loading ...

  3. 版本号(version number)

    版本号(version number)版本号是版本的标识号.每一个操作系统(或广义的讲,每一个软件)都有一个版本号.版本号能使用户了解所使用的操作系统是否为最新的版本以及它所提供的功能与设施.每一个版 ...

  4. HBase major version number must be less than 2 for hbase-sink

    2019独角兽企业重金招聘Python工程师标准>>> org.apache.flume.conf.ConfigurationException: HBase major versi ...

  5. Bad version number in .class file

    ---恢复内容开始--- MyEclipse启动tomcat出现Bad version number in .class file此错误时,可以用如下方法解决: 找到MyEclipse的菜单,找到Wi ...

  6. Unrecognized Hadoop major version number: 3.0.0-cdh6.3.2

    spark任务提交cdh集群yarn模式执行报错: Exception in thread "main" java.lang.ExceptionInInitializerError ...

  7. java.lang.UnsupportedClassVersionError: Bad version number in .class file 解决方法

    在myeclipse下出现java.lang.UnsupportedClassVersionError: Bad version number in .class file异常,是由于编译器版本不一样 ...

  8. java.lang.UnsupportedClassVersionError: Bad version number in .class file异常

    java.lang.UnsupportedClassVersionError: Bad version number in .class file异常 部署工程时也出现过因为版本不同引起的问题,那时我 ...

  9. 未能解析主引用“Fiddler”,因为它是针对“.NETFramework,Version=v4.6.1”框架生成的。该框架版本高于当前目标框架“.NETFramework,Version=v4.5

    警告        未能解析主引用"Fiddler",因为它是针对".NETFramework,Version=v4.6.1"框架生成的.该框架版本高于当前目标 ...

最新文章

  1. 【组队学习】【27期】Java编程语言
  2. Delphi-网络编程-UDP聊天程序(转)
  3. JS无法获取display为none的隐藏元素的宽度和高度的解决方案
  4. 什么数据库比mysql效率高_牛x!一款比传统数据库快 100-1000 倍的数据库,来认识一下?...
  5. 如何使用hyperopt对xgboost进行自动调参
  6. P1131 [ZJOI2007]时态同步
  7. Lucene查询索引代码实现
  8. 画函数图形的C#程序(改进版) (转)
  9. 09-Flutter移动电商实战-移动商城数据请求实战
  10. python 文档操作_Python 文件操作
  11. 涂国旗(洛谷P3392题题解,Java语言描述)
  12. 《ArcGIS Runtime SDK for .Net开发笔记》--介绍与环境搭建
  13. 机器学习实战——AdaBoost
  14. 计划策略(planning strategy)
  15. USB无线网卡的Linux驱动移植
  16. ps曲线操作(转载)
  17. 揭秘跨境电商亚马逊店铺最新骗局!!小白做亚马逊店铺如何防止上当受骗?
  18. 详解win10开机启动慢是什么原因怎么解决
  19. SQL SEVER登录失败,无法连接服务器或已成功与服务器建立连接,但是在登录过程中发生错误。(Win10版本,SQL 2019)
  20. word html 无批注,Word怎么修改成无批注状态

热门文章

  1. 堆栈指针寄存器-SP详解
  2. Linux 进程通信之:管道 (Pipe)
  3. 单片机外部晶振-XTAL和EXTAL引脚
  4. (转)EditText属性详解
  5. ChatGPT 爆火的背后:深度解读“智能对话”与“人机交互”技术
  6. java sql server连接字符串_java连接sql server
  7. 关于http的Authorization
  8. 机器学习1-线性模型及多分类
  9. 荣耀play4tpro有没有鸿蒙,荣耀play4tpro有nfc吗?没有 只能借助支付宝等
  10. apt-get update和apt-get upgrade的区别