一、场景介绍
在项目开发过程中,项目版本号的管理和维护对于开发人员来说是一个非常不愿意去维护的事情。特别是微服务盛行的今天,子模块独立开发,子模块独立升级。各种版本之间的交叉并行,老虎、老鼠、傻傻分不清楚。
不同的企业对项目的版本管理有不同的规定,我们应该根据不同的需求去指定版本管理流程。本次主要以每一次的 Jenkins
编译为一个版本号为例,来阐述采用 Version Number Plug
做版本管理的实现细节。
在实践过程中遇到一个问题,就是每次采用 Jenkins
编译 pom.xml
的时候,Version Number Plug
的版本号总会比 build
出来的 jar
项目大一个版本号,网上寻觅出来的原因是因为在采用 Jenkins
构建编译的时候,Jenkins
会将 pom.xml
先加载到内存中,然后通过 setversion
命令进行版本设置,但是实际打包的时候,还是读取的内存中的 pom.xml
文件导致
二、插件安装
官方地址: https://plugins.jenkins.io/versionnumber/
离线下载地址: http://updates.jenkins-ci.org/latest/versionnumber.hpi
-
在
Jenkins
的插件管理中安装Version Number
插件 -
重启
Jenkins
服务,使该插件为Jenkins
服务
三、插件配置
-
找到需要采用该插件进行版本管理的项目模块 → 配置 → 构建环境
变量说明:
BUILD_VERSION:变量名
${JOB_name}:项目名称
${BUILD_DATE_FORMATTED, "yyyyMMdd"}:格式化后的日期
${BUILDS_TODAY}:今天构建的数量
P.S
在 Jenkins
中直接调用 Shell
脚本中调用 echo ${BUILD_VERSION}
查看版本的效果是否和自己的预设一致。
四、参数说明
Version Number Format String
处理版本号格式字符串以创建存储在命名环境变量中的版本号。版本号格式字符串中的每个字符都会传递到最终版本号,但$ {}中包含的变量除外。例如,如果版本格式字符串1.0。$ {BUILDS_THIS_YEAR}是该日历年的第十个版本,则将返回1.0.10。
以下是在版本号格式字符串中使用的有效变量:
名称 |
功能 |
---|---|
BUILD_DATE_FORMATTED |
采用第二个参数,并返回给定构建日期的Java格式的日期字符串。例如,$ {BUILD_DATE_FORMATTED,“ yyyy-MM-dd”}将返回日期(而不是时间),类似于2009-10-01。日期格式字符串必须用引号引起来,并且格式字符串中的任何空格都是有效的。 |
BUILD_DAY |
没有参数,它只是以整数形式返回构建日期。如果有参数,它将使用参数中的字符数,并使用该字符填充日期字符串。例如,如果是该月的第三天,则$ {BUILD_DAY}将返回3,$ {BUILD_DAY,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。$ {BUILDS_ALL_TIME}移至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一样,这仅取决于年份; |
(还要别的吗) |
如果可用,否则$ {}中包含的任何其他参数将被同名的环境变量替换,否则将被忽略。例如,这可用于集成源代码管理版本号。 |
初始化值
在开始构建之前,可以在命令行或通过作业的插件配置Web GUI指定今年/月/周/天的构建数量。如果指定了它们,则它们将覆盖生产中当前使用的任何值。如果选择这样做,则可以将版本号从另一个系统迁移到Jenkins。
此外,可以使用取自环境变量的值自动覆盖今年/每月/每周/每天的构建数量。您可以提供一个环境变量,而不是在作业的插件配置的表单字段中提供一个覆盖下一个构建的值的简单数字(如上所述),而是提供一个环境变量,该变量将在下一个构建过程中提取并使用。建立。如果未设置它或它的值不能转换为正整数(不损失精度),则将采用以前版本的值并将其增加一个(标准行为)。
五、使用
echo ${BUILD_VERSION}