我试图扩展我们的Jenkins工作(构建整个项目),以将构建的工件部署到我们的Artifactory,但是随后我遇到了一些与工件版本控制相关的问题。如果我尝试重新部署其版本未更改的工件(不是快照),则会得到可以理解的错误403(用户'foo'需要DELETE权限),我不应该替换已经发布的工件。如果工件版本包含-SNAPSHOT
,那么就没有问题,它总是被上传。我的问题是:我们应该如何处理在Artifactory中锁定覆盖的情况?
答案 0 :(得分:1)
Jenkins的人工插件应该只是忽略部署 万一已经部署而不是失败的工件 工作?
如果工件已使用固定版本(非-SNAPSHOT)进行部署,则作业应失败。例如,在手动作业触发器上,我想知道是否尝试使用已经发布的版本名称(可能是由团队中的其他人)构建和部署
或者我们应该始终使用-SNAPSHOT(在开发过程中),甚至 神器没有改变?
-SNAPSHOT是为开发而设计的。是的,我们通常会在构建结束时推送工件,即使由于您更新了例如README并触发了作业而导致工件没有变化的情况也是如此。
通常,SNAPSHOT的生存期取决于二进制存储库(此处为Artifactory)的配置方式。 SNAPSHOT例如可以每2周清洁一次。
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并在工件中包含一个带有构建日期的文件。工件本身可以使用此文件来在运行时告知其版本。
答案 1 :(得分:0)
您可以使用内部版本号,并且不会覆盖现有版本。相反,buildNumber可能包含一些错误修正/安全修正。
https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#A1000661
如果使用依赖关系,则可以使用表达式处理版本。涵盖buildNumber的确切版本或表达式。