想要工件追踪,同时又不想放弃快照限定符。

9

背景. 我们的组织使用Maven、Bamboo和Artifactory来支持连续集成流程。我们依靠Maven的SNAPSHOT限定符来帮助管理Artifactory中的存储(轮换掉旧的SNAPSHOT构建),并帮助保持跨团队的集成最新(Maven在每次构建时自动检查SNAPSHOT依赖项的更新)。

问题. 我们面临的一个挑战是如何在继续使用SNAPSHOT的同时,正确地将构建从环境推广到环境。假设测试人员将版本1.8.2-SNAPSHOT部署到功能测试环境,并且在Subversion中是1400版。还假设它通过了功能测试。当测试人员决定从Artifactory将1.8.2-SNAPSHOT拉入性能测试环境时,开发人员可能已经提交了Subversion的更改,因此Artifactory中的实际二进制文件处于不同的版本。我们应该如何确保在使用SNAPSHOT构建时版本不会在我们身下更改?

约束条件. 我们显然不希望无意识地部署不同的构建。我们也不想从源代码重新构建,因为我们想在性能测试中测试与功能测试中相同的二进制文件。

我们考虑的方法. 我们想要用第四个组件(如1.8.2.1400)标记版本,其中第四个组件是Subversion修订版号。 (附带问题是,是否有Maven插件或其他自动执行此操作的工具?)但如果我们这样做,那么基本上我们就失去了SNAPSHOT功能,因为Maven和Artifactory认为这些是不同的版本。

我们使用Scrum,因此我们很早就将其部署到测试环境中(例如第二天左右)。我认为在开发周期的那么早的阶段删除SNAPSHOT限定符是没有意义的,因为我们又失去了SNAPSHOT的好处。

希望知道其他组织如何解决此问题。

3个回答

3

回到这个问题,我想分享一下我们正在做的事情。

基本上,我们将快照版本构建(例如1.8.2-SNAPSHOT)部署到开发环境中。其他团队不需要使用这些构建,因此在它们上面保留-SNAPSHOT是可以的。

但是,我们部署到测试环境(例如功能测试、系统测试)或生产环境中的任何构建都必须包括修订号;例如1.8.2.1400。我们称这些为“四元组”。坚持在测试中使用四元组的原因是我们可以将问题(功能、错误修复等)附加到特定的修订版本,以便测试人员知道要测试什么。对于生产环境来说,实际上只是因为我们希望部署与我们测试的完全相同的构件,这意味着我们正在部署一个四元组。

总之,希望这些信息对某些人有用。


1

我们不是将VCS修订版号嵌入到工件版本中,而是将CI构建号嵌入到META-INF/MANIFEST-MF文件中。

例如,请参见使用Hudson环境变量标识您的构建。尽管该文章适用于Jenkins/Hudson,但我认为将其移植到Bamboo很容易。


我明白了。是的,我们也讨论过这样做,因为从CI构建编号恢复VCS rev比反过来要容易得多。那是你的主要动机还是你有其他想法? - user41871
我的动机是想知道我正在测试哪个版本。我从未考虑过将任何内容嵌入到构件版本号中,因为这对用户来说不是直接可用的 - 这是我的主要目标 - 并且似乎更难实现。 - Robert Munteanu

1
如果您为快照构建启用了“uniqueVersion”,则每个部署的快照都将具有唯一的ID。您可以使用它来确保在各个环境中正确地推广构建。
此外,您还可以使用buildnumber-maven-plugin向工件添加子版本构建号。

是的,但这不会阻止Maven仓库收集旧的快照吗? - user41871
哦,还有感谢您提供的buildnumber-maven-plugin参考。 - user41871
@Willie - 是的,没错。假设你只在短时间内使用快照(几周左右),你可以配置你的仓库清理程序,保留一定时间内有用的快照。 - jtahlborn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接