【问题标题】:Maven publishing artefacts to remote repository and using $release in the artefact versionMaven 将工件发布到远程存储库并在工件版本中使用 $release
【发布时间】:2014-08-15 10:50:33
【问题描述】:

想知道人们如何通过 DEV - AQA - CQA - RELEASE 等环境生命周期来管理他们的项目工件,以及是否有一些最佳实践可供遵循。

我使用 Jenkins 构建服务器来构建我的项目(代码签出然后 maven 构建)。我的人工制品都有 1.0.0-SNAPSHOT 版本,并发布到构建服务器上的本地 .m2 存储库。还有一些 Jenkins 作业使用这些人工制品重建 DEV 系统(在同一台服务器上)。每当有人签入代码时,项目构建都是自动化的。 DEV 构建每晚自动进行。

在某个时候,我的首席开发人员确定我们的项目适合进入 AQA(不同服务器上的第一级测试环境)。

为此,我需要将人工制品标记为版本 1.0.0-1 并发布到远程 AQA 存储库(它实际上是一个 Nexus 存储库)。

Maven 部署插件听起来是正确的方法,但是如何将版本号更改为有效的 1.0.0-$release(其中 $release 只是从 1 开始的递增数字)? Maven/Nexus 是否能够管理 $release 的值,或者我是否需要在我的项目中使用一个简单的属性文件来存储/更新上次使用的 $release。

此外,有人测试 AQA 并确定其适合继续使用 CQA(第二个测试环境)。这是“提升到 AQA”。所以我的要求是从 AQA Nexus 存储库复制工件并发布到 CQA Nexus 存储库。

同样,在 CQA 之后,也会有一个“升级到 RELEASE”的工作。

我认为版本值在“升级”阶段保持不变。我希望 AQA repo 能看到所有版本 1-50,但 CQA 只有 25 和 50,然后 RELEASE 只有 50,例如。

我可以找到大量关于 Maven 插件/目标/阶段的信息,但很少有关于在直接开发环境之外如何或在何处使用的规定方法。

任何建议都非常感谢。

【问题讨论】:

    标签: maven jenkins


    【解决方案1】:

    暂存/推广超出了 Maven 的范围。一旦部署/上传到远程存储库,该系统负责完成发布周期。阅读有关登台的章节:http://books.sonatype.com/nexus-book/reference/staging.html 如果您使用 Nexus。

    【讨论】:

      【解决方案2】:

      内部版本号就是内部版本号。它们不是促销/临时编号。

      您应该想出另一种方法来跟踪您的促销活动,否则可能会在“知道”版本 10.1.4-2 与 10.1.4-6 相同时感到困惑。当然,所有与 Maven 相关的软件都会将这两个构建视为不同的构建。

      此外,如果有人“抓取”了错误的构建副本,那么您在构建编号中管理分段的方式将增加混乱。好像您没有杀死所有 10.1.4-2 构建,那么有人可能会得到一份副本,而没有意识到该构建已升级到 10.1.4-6。这意味着要使“最后一个”暂存编号成为最有可能被抓取的编号,您必须做两件事(这两者不可能结合使用)

      1. 删除所有旧的暂存编号,将它们更新为新的。
      2. 确保没有旧分段编号的副本逃脱更新。

      由于人们通常可以在不被跟踪的情况下复制文件,或者在“更新”时可能无法访问所述文件,或者到达所有文件之间的时间不能同时进行,因此这样的系统注定要失败。

      相反,我建议(如果您必须按文件跟踪)将相同的文件放在不同的“暂存目录”中。这通过文件是否存在于某个目录中来定义发布网关,并清楚地表明它是经过整个过程的同一个文件。此外,让验证的各个阶段轮询它们各自的目录变得很容易(如果你真的愿意,你可以编写 Jenkins 任务来从一个目录提升到另一个目录)。

      【讨论】:

        猜你喜欢
        • 2016-05-30
        • 2014-02-15
        • 2019-06-13
        • 2012-12-22
        • 2019-04-03
        • 2019-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多