如何在不覆盖的情况下对Artifactory上的工件进行版本控制



我试图扩展我们的Jenkins工作(构建整个项目(,将构建的工件部署到我们的工件工厂,但随后我遇到了一些与工件版本控制相关的问题。如果我试图重新部署一个版本没有更改的工件(不是快照(,我会得到一个错误403(用户"foo"需要DELETE权限(,这是可以理解的,我不应该替换已经发布的工件。如果工件版本包含-SNAPSHOT,那么就没有问题,它总是被上传的。我的问题是:我们应该如何处理在Artifactory中锁定覆盖的场景?

  • Jenkins的artifactory插件难道不应该忽略工件的部署吗
  • 或者,即使工件没有更改,我们也应该始终使用-SNAPSHOT(在开发过程中(
  • 即使工件没有改变,我们是否会在每次发布时增加版本

Jenkins的artifactory插件不应该忽略部署吗的工件已经部署,而不是使工作

如果工件已经使用固定版本(非SNAPSHOT(部署,则作业应该失败。例如,在手动作业触发器上,我想知道我是否试图使用已经发布的版本名(可能是团队中的其他人(构建和部署

或者我们应该始终使用-SNAPSHOT(在开发过程中(,甚至工件没有改变?

-SNAPSHOT是为开发而设计的。是的,我们通常在构建结束时推送工件,即使它没有改变,因为您更新了README,并且触发了作业。

通常SNAPSHOT的生存期取决于二进制存储库(此处为Artifactory(的配置方式。例如,SNAPSHOT可以每两周清洗一次。

Manuel共享的链接还有其他有趣的定义,比如

Usually, only the most recently deployed SNAPSHOT,
for a particular version of an artifact is kept in the artifact repository.
Although the repository can be configured to maintain a rolling archive
with a number of the most recent deployments of a given artifact

https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN401

我们是否在每次发布时都增加版本即使是人工制品也没有改变?

是的,我们在每次发布时都会增加版本号。我把客户将得到的东西称为发布。除非在特殊情况下,如果工件没有更改,您就不会经历发布过程。一个发布通常涉及一个组织中的很多人,甚至不是来自Development的人。一个流行的标准是使用语义版本控制https://semver.org/有时人们更喜欢用日期来表示。我的建议是使用semver,并在工件中有一个包含构建日期的文件。工件本身可以使用该文件在运行时告知其版本。

您可以使用内部版本号,并且不会覆盖现有版本。相反,buildNumber可能包含一些错误修复程序/安全修复程序。

https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#A1000661

如果你使用depenency,你可以用表达式处理版本。包含buildNumber的精确版本或表达式。

最新更新