当前位置: 首页 > 知识库问答 >
问题:

如何处理Jenkins上的语义版本控制

诸新霁
2023-03-14

我在我的工作场所开始学习詹金斯。我们对Teamcity使用语义版本控制,我想在Jenkins上实现同样的功能。当我将工件存储在builds文件夹($JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_NUMBER)中时,出现了我的问题,因为JENKINS仅使用BUILD_NUMBER为BUILD创建文件夹,因此当我必须重置反BUILD_NUMBER时,未来工件将存储在以前版本的文件夹中。

例如:

我已经建立了1.3.1_开发。1存储,当我重置版本号时,下一个版本应为1.3.2。1,并应存储在build 1.3.1\u develop的文件夹1中。1.

我的问题是,如果有人能解释我如何处理jenkins上的自动语义版本控制,因为我们重置了构建编号,增加了mayor、minor和patch编号。

詹金斯版本:2.89.4作业--

谢谢你的帮助。

共有2个答案

长孙瑞
2023-03-14

有一个工具GitVersion,它可以满足您的需要,并且可以与Jenkins或其他CI集成。

https://gitversion.readthedocs.io/en/latest/build-server-support/build-server/jenkins/

陶山
2023-03-14

我注意到的第一件事是您没有正确使用语义版本控制<代码>1.3.1\u开发。1应为1.3.1-development 1。生成元数据的前面应始终加上“”符号,并且不会被分解到SemVer排序顺序中。

第二,构建编号永远不会“重置”,它可能最终会滚动,但永远不应该重置。除非只有一个版本号,否则不表示执行版本的机器的版本号通常也是无用的。

基本上,语义版本控制中没有构建编号的概念。该标准指定了构建元数据的语法,但对可能包含的内容完全没有影响。构建编号在语义版本控制级别通常是无用的。它们用于防止CI构建系统中的目录冲突,甚至为某些产品线(例如Windows)提供唯一标识符,特别是在不使用语义版本控制的情况下(再次使用Windows)。

除了任何构建计数器之外,我建议在构建元标记中使用SHA-1或更好的构建输入散列(例如Git commit Id),并将其用作输出目录名。您仍然可以在prerelease标记上使用单调计数器,但是为了保持唯一性,您必须创建一个包含整个semver字符串的生成输出目录名。

第三,构建机器是归档构建工件最糟糕的地方!构建自动化可以而且确实会不时出现可怕的错误。您的生成系统不应该有权访问您的生成工件存档。当您的构建和初始冒烟测试完成时,它应该发出一个在完全不同的机器上运行的进程的信号,以将工件从构建机器移动到一个更安全的位置。构建系统上运行的任何进程都不应该具有对构建工件存档的写访问权限。

 类似资料:
  • 问题内容: 我知道BigQuery中没有数据类型。您希望在BigQuery中处理什么语义版本? 我有以下架构: software_version列是但我存储在其中的数据为semver格式:`MAJOR.MINOR.PATCH-prerelease 我特别想执行运算符 。 返回,但是根据semver的定义,它是错误的。因为char用于预发布。 问题答案: 以下是BigQuery标准SQL 您可以使用

  • 本文向大家介绍npm 语义版本控制详解,包括了npm 语义版本控制详解的使用技巧和注意事项,需要的朋友参考一下 场景引入 开发时,经常需要依赖一些模块(包),我们进行了下载之后,便一直在该版本的模块环境下进行开发,但是线上的服务器(其他开发者)一般都是根据依赖来配置文件,重新下载各个模块,但是保不齐某个模块的版本已经更新了,这时线上的包会更新到最新的版本,但你的代码还是依据老版本来写的,这时可能会

  • 问题内容: 我试图弄清楚如何向将管理一些构建的Jenkins添加管理构建,以及如何将参数从管理构建传递到子构建。 问题答案: 您正在寻找参数化触发器插件。 安装插件后,请参考下面的第二张快照。转到项目页面。搜索。之后,点击 快照上方是父作业A,其中我正在定义一个字符串参数,该参数将在其子作业B中使用。 快照还是父作业A的快照,我在其中指定了下游(子)作业B并启用了该操作, 这将确保父作业A中定义的

  • 问题内容: 假设我为使用版本10内核的OS制作了一个映像,如果我在运行版本9内核的主机OS上为该映像运行一个容器,那么Doc​​ker会表现出什么行为?那版本11呢? 版本的向后兼容性重要吗?我出于好奇而问,因为文档仅讨论“最低Linux内核版本”等。这听起来像主机运行的内核版本超出该最低值无关紧要。这是真的?有警告吗? 问题答案: 假设我为使用版本10内核的操作系统制作映像。 我认为这是一个误解

  • AEM多模块项目具有。我们可以在那个级别更改版本,新的构建将显示具有更新版本的工件。 对于版本,将为每个版本创建一个新的AEM包。我们希望在安装新版本之前卸载/删除旧包。 问题是,如何在CI-CD作业中处理旧软件包的卸载/删除部分(要安装的新软件包版本不同)?我们可以考虑以下解决方案 查询软件包列表以获取版本并使用该版本卸载。 在"用参数构建"中将版本作为参数传递给Jenkins作业。但是代码签入

  • 我一直在搜索如何使用Spring3.2.x管理REST API版本,但没有找到任何易于维护的内容。我先解释一下我遇到的问题,然后再给出一个解决方案...但我不知道我是不是在重新发明轮子。 以1.0版本的API为例,到1.8版本,在1.0版本中引入了一个处理程序,并在1.7版本中进行了修改,我希望以以下方式处理这个问题。假设代码在一个控制器中,并且有一些代码能够从头中提取版本。(以下为Spring无