热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Jenkins属性持久化版本号自动递增

Jenkins属性持久化以实现版本号自动递增环境确认环境版本Jenkins2.332.3JenkinsFile声明式语法1.3适用于Jenkins版本2.100+,声明语法版本0.

Jenkins属性持久化以实现版本号自动递增

环境确认



















环境版本
Jenkins2.332.3
JenkinsFile声明式语法 1.3

适用于Jenkins版本 2.100+ , 声明语法版本 0.8+


情况说明


场景

最近使用Jenkins的过程中,参数化构建过程中,产生了持续化参数的场景:

同样一条流水线, 在进行调用的时候能够实现版本号的自动递增.

如:

该流水线第一次调用成功, 版本号为v0.1

那第二次调用时, 产出的版本号应该为v0.2


背景

因为使用的Jenkins版本较新,22年5月底刚发布.

找遍全网, 大部分解决方案对应的是 Jenkins 2.70及以下,或脚本式语法的版本.

70 -- 300之间语法和使用方式又或者插件支持发生了比较大的变化, 都不再适用.

尝试过


解决


1. 添加参数化构建

流水线配置 ==> 参数化构建过程 ==> 增加参数

图片:

此处设置参数为PROJECT_VERSION为0.1


UI界面设置后, 此时点击构建, 该参数出现在顺序位置



2. 流水线JenkinsFile添加参数重写的步骤

pipeline {
...

parameters {
string (defaultValue: '1.1', description: '版本号', name: 'TEST_VERSION', trim: true)
}

stages {
...
}
}

配置流水线JenkinsFile, 编辑了pipeline中parameter节点后, 保存并运行.

运行之后该参数已经重写, 此时点击构建, 该参数出现在第一位(JenkinsFile内重写后顺序前移)



3. JenkinsFile实现版本号自增

// 版本号自增并保存, 当次运行流水不生效
def getNextVersion() {
NEXT_VERSION = params.PROJECT_VERSION
VERSION = NEXT_VERSION.tokenize('.')
LARGE_VERSION = VERSION.get(0)
MINOR_VERSION = VERSION.get(1)
MINOR_VERSION = MINOR_VERSION.toInteger() + 1
NEXT_VERSION = "${LARGE_VERSION}.${MINOR_VERSION}"
return NEXT_VERSION
}
pipeline {
...

parameters {
string (defaultValue: getNextVersion(), description: '版本号', name: 'TEST_VERSION', trim: true)
}

stages {
...
}
}

为自增小版本号, 且小版本号为自然数

此处应注意:

直接使用 params.PROJECT_VERSION + 1 会报错

environment节点内的变量无法作用于平行的parameters节点内

只能通过pipeline外定义函数的方式来实现自增

此时点击构建, 每次构建之后, 小版本号已经可以实现自增+1



4. 添加版本号自增条件

并不是什么时候都需要自增的, 如果流水线调用的频率较高或者不需要频繁实现自增则可增加条件判断. 如时间, 名称等

此处增加了时间维度的周版本判断, 当有周版本出现时, 小版本号+1


// 1: 周日
// 2: 周一
// 3: 周二
// 4: 周三
// 5: 周四
// 6: 周五
// 7: 周六
// Sunday ==> Saturday
def getWeeklyFlag() {
WEEKLY_FLAG = false
TODAY_FLAG = new Date().getAt(Calendar.DAY_OF_WEEK)
HOUR_FLAG = new Date().getHours()
// 周四凌晨0-6点之间
if (TODAY_FLAG == 5 && HOUR_FLAG <6) {
WEEKLY_FLAG = true
}
return WEEKLY_FLAG
}
def getNextVersion() {
NEXT_VERSION = params.PROJECT_VERSION
if (getWeeklyFlag()) {
VERSION = NEXT_VERSION.tokenize('.')
LARGE_VERSION = VERSION.get(0)
MINOR_VERSION = VERSION.get(1)
MINOR_VERSION = MINOR_VERSION.toInteger() + 1
NEXT_VERSION = "${LARGE_VERSION}.${MINOR_VERSION}"
}
return NEXT_VERSION
}
pipeline {
...

parameters {
string (defaultValue: getNextVersion(), description: '版本号', name: 'TEST_VERSION', trim: true)
}

stages {
...
}
}

参考

有价值参考:

https://stackoverflow.com/questions/17585615/how-to-store-last-value-of-parameter-in-parameterized-job-as-a-default-value-for

https://stackoverflow.com/questions/35370810/how-do-i-use-jenkins-pipeline-properties-step

https://stackoverflow.com/questions/46827883/how-to-store-the-previous-parameters-values-in-a-jenkins-pipeline

底层逻辑:

https://javadoc.jenkins-ci.org/hudson/model/ParameterDefinition.html



推荐阅读
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • 优化Jenkins首次启动速度
    本文详细描述了在启动Jenkins后遇到的长时间加载问题,并提供了一种通过修改更新中心配置文件来显著提升启动速度的有效解决方案。 ... [详细]
  • 持续集成概述与实践指南
    本文探讨了持续集成(CI)的基本概念、目的及其在现代软件开发中的应用。通过实例分析,帮助读者理解如何有效实施持续集成,提高软件开发效率。 ... [详细]
  • SonarQube自动化代码扫描的安装与集成实践
    SonarQube是一款强大的开源代码质量管理平台,支持多种编程语言。通过集成不同的开发工具和CI/CD流程,SonarQube能够提供全面的静态代码分析服务,帮助开发者早期发现并修复代码缺陷,从而提高软件质量和安全性。 ... [详细]
  • Page Object 是一种设计模式,用于实现 Selenium 的最佳实践,它通过将 Web 应用的页面展示逻辑与测试代码分离来简化测试过程。采用 Page Object 模式的主要目的是为了提高测试代码的可维护性,减少重复代码,使测试更加结构化。 ... [详细]
  • 软件项目管理实践——Jenkins持续集成与Maven、GitHub的应用
    本文详细介绍了如何利用Jenkins实现持续集成,以及Maven和GitHub在项目开发中的具体应用。包括环境搭建、工具安装、项目创建及代码管理等关键步骤。 ... [详细]
  • 本文档详细规划了从基础到高级的软件测试学习路径,包括但不限于测试基础、Linux和数据库、功能测试、Python编程、接口测试、性能测试、金融项目实战、UI自动化测试等内容,旨在为初学者和进阶者提供全面的学习指导。 ... [详细]
  • 实践指南:利用Jenkins与JMeter实现自动化测试报告通知
    本文详细介绍了如何结合Jenkins和JMeter工具,通过自定义脚本向用户发送测试报告的通知。这不仅提高了开发团队的工作效率,也确保了信息的及时传递。 ... [详细]
  • 提升接口测试效率的关键:用例与工具的综合应用
    本文将探讨如何通过有效的接口测试用例设计和工具选择,显著提高接口测试的效率和质量。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • Learn the steps to transfer Jenkins jobs into subfolders for better organization and management. ... [详细]
  • Jenkins API当前未直接提供获取任务构建队列长度的功能,因此需要通过解析HTML页面来间接实现这一需求。 ... [详细]
  • 本文介绍了多种常用的开发工具,包括PyCharm、Appium、Jenkins、Postman、Fiddler、Charles、Airtest、Android Studio、Navicat和Typora,并提供了它们的基本使用方法。 ... [详细]
  • 本文介绍了在 CentOS 7 系统中如何查看所有活动进程及其运行时间。通过使用 `netstat` 和 `ps` 命令,您可以轻松获取进程的详细信息,包括启动时间、用户、终端和命令等。 ... [详细]
  • 解决Jenkins编译过程中ERROR: Failed to Parse POMs的问题
    在使用Jenkins进行自动化构建时,有时会遇到“ERROR: Failed to parse POMs”的错误。本文将详细分析该问题的原因,并提供有效的解决方案。 ... [详细]
author-avatar
Pingac
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有