将快照构件发布到 Azure DevOps Artifacts

13
我在Azure DevOps中设置了Gradle构建,它编译了Azure DevOps git存储库中的代码,然后将生成的JAR文件(作为Maven构件)发布到Azure Artifacts中,如此处所述。其他Azure DevOps git存储库中的代码可以将这些组件作为依赖项进行引用。对于这些组件的正式版本(具有唯一的版本号),这是可行的,但我还需要一种方法来使其适用于正在进行的快照版本。问题在于我无法多次发布具有相同版本号的构件(例如1.2.3-SNAPSHOT)。这似乎是因为Azure中的包是不可变的
据我了解,这意味着Azure Artifacts不能用于存储正在进行的快照构件。这是正确的吗?
如果是这样,是否有任何替代方案仍然使用Azure DevOps?我可以看到我可以将构件发布到Azure Blob Storage,但我认为这是除了现有的Azure Artifacts使用之外额外需要支付费用的服务。我还可以看到有许多GitHub Maven插件用于将GitHub存储库视为Maven存储库,但我找不到类似的内容来使用Azure DevOps存储库作为发布Maven构件的地方。

如果这有所不同的话,我说的是基于云的Azure东西,没有本地部署的内容。


你找到答案了吗?我面临一个问题,需要将Maven快照存储库迁移到Azure Artifacts,但我不确定是否支持。 - Tomislav Markovski
1
很抱歉,@TomislavMarkovski,我也怀疑它不受支持。由于这个原因和成本问题,我们最终放弃了使用Azure。 - Yoni Gibbs
3个回答

3
对于Maven,快照版本和其他版本中的jar包打包方式有所不同。例如,假设我将我的jar包版本化为1.0.0-PRERELEASE,那么该版本是不可变的。一旦我将其发布到任何构件存储库,它就无法被覆盖。通常,包管理系统会将构件存储在这种逻辑路径中:<group_id>/<artifact_id>/<version>/<artifact_id>_<version>.jar
但是对于快照版本,情况略有不同。在Maven中,快照版本是可变的。这意味着您可以覆盖快照版本。这是有道理的,因为按定义,快照版本类似于正在进行活动开发的代码的图像。快照版本在包管理源中的存储方式类似于:<group_id>/<artifact_id>/<version(SNAPSHOT)>/<artifact_id>_<version>_<jar_timestamp>.jar
在这种情况下,jar包的命名约定使其可变。在单个快照版本中,可能存在具有不同时间戳的多个jar包。当Maven查找要下载的快照依赖项时,它始终选择最新的一个(从逻辑上讲,这是最新的快照)。
目前Azure Artifacts完全按照它们应该实现这些概念。也许之前没有这个功能,而是在更新中推出的。
参考链接:http://maven.apache.org/guides/getting-started/index.html#What_is_a_SNAPSHOT_versionhttps://xebia.com/blog/continuous-releasing-of-maven-artifacts/

0
软件包管理的前提是软件包是不可变的。这使得许多缓存选项成为可能,否则这些选项将不存在。软件包存储在本地软件包缓存中,可能还存储在代理源软件包缓存中,所有这些元素都假定具有相同名称+版本的软件包未更改,并且将提供缓存版本而不是您推送的最新版本。大多数软件包系统都建立在这个前提上,包括Nuget和NPM。
创建开发快照的技巧是使用语义化版本控制并向版本添加唯一后缀。例如1.2.3-SNAPSHOT.1,然后是1.2.3-SNAPSHOT.2,Azure Pipelines等工具可以自动生成一个唯一的版本+后缀,您可以将其传递到您的构件版本中。
如果您不想“搞乱”主要软件包源,可以设置第二个用于开发目的的源,其中包含所有中间软件包,然后可以将其中一个软件包推广到主要源,或者运行特定的管道(配置)将最终软件包推送到用于稳定软件包的源。

这不是Maven快照的工作方式。https://blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/#snapshot-repositories - opticyclic
4
我了解Maven的工作原理可能会有所不同,但以下翻译接近原意。如果需要,您可以添加反馈视图。这就是包管理的工作方式。 - jessehouwing
1
感谢您的解释。老实说,对我来说Azure Artifacts并不是例如Nexus实例的替代品。快照的唯一原因是在您的开发分支中定义一个x.x.x-SNAPSHOT版本,它将自动拉取最新的开发版本(而不是发布版本)。如果这个版本需要不断更新,那么Azure的概念在这里就不适用了。 - Blacklight
我在使用Azure DevOps和非Microsoft产品时感到有些不适应。 - Kukeltje

0

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