【问题标题】:maven: deploy dependencies to alternate repositorymaven:将依赖项部署到备用存储库
【发布时间】:2011-12-14 18:52:14
【问题描述】:

我正在尝试使用我们的 Maven 构建进行构建提升设置。我自己这样做是因为我发现的存储库管理器不太符合要求。

我希望这个过程像这样工作:
1. 开发将 ear 和 jar 文件部署到“dev”存储库
2. 构建团队运行构建以获取这些文件,添加 QA 特定配置模板,将结果打包成 zip 文件
3. 使用 <altDeploymentRepository> 选项,构建团队将 zip 文件部署到 QA 存储库
4.将依赖的ear和jar文件部署到QA仓库 5. QA 周期完成后,构建团队运行构建以下载(现已测试的)jar 和 ear 文件,添加 preprod 特定配置模板,并将结果打包成 zip 文件
6. 使用 <altDeploymentRepository> 选项,构建团队将 zip 文件部署到 Preprod 存储库
...并再次重复该过程以进行生产部署

在第 4 步之前一切正常。似乎没有办法告诉 maven 将 依赖项 部署到备用位置。

所以最终的结果是我如何在存储库之间复制 dependent ear 和 jar 文件,并且这样做的方式是版本信息是完整的,并且我可以针对他们。

源和目标存储库的切换是通过 maven 配置文件完成的:

<profile>
  <id>qa</id>
  <distributionManagement>
    <repository>
      <id>prddeploy</id>
      <name>build server repository</name>
      <url>${repoHost}/dev_repo</url>
    </repository>
  </distributionManagement>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
        <configuration>
         <altDeploymentRepository>qadeploy::default::${repoHost}/qa_repo</altDeploymentRepository>
        </configuration>
      </plugin>
    </plugins>
  </build>
</profile>

“开发”配置文件是默认配置,因此开发不需要特殊步骤,它们只需运行 mvn deploy。构建团队运行:mvn deploy -P qa 以启动 qa 部署周期。

我已经尝试使用 nexus 和 artifactory 作为存储库管理器。我使用哪一个似乎并不重要,但是如果一个或另一个会使这个过程更容易,两者都可用。

我知道 nexus 在其专业版中提供了构建升级功能,但根据文档,关键的交易破坏者是分阶段存储库必须是 closed 才能使用。我们的软件有许多不同的组件,当修复 QA 中的错误时,我们需要能够仅重新部署更改的组件,而不是整个系统。 nexus 分阶段存储库设置似乎不允许这样做。如果我读错了,请有人指出正确的方向。

【问题讨论】:

    标签: deployment maven-2 repository


    【解决方案1】:

    您应该重新考虑为什么Nexus Pro staging suite 似乎限制了您。

    “关闭”临时存储库的想法是防止对一组工件的任何进一步更改传递给 QA 进行认证。

    我会推荐以下解决方案之一:

    • 剪切一个较小的补丁版本,旨在应用在 QA 中的当前版本之上。
    • 如果您的组件是真正独立的,请考虑将它们作为独立版本化的组件发布。

    更新

    Artifactory 有一个alternative way 来管理工件的暂存和升级,使用标记。细节对我来说并不完全清楚,但此解决方案可能会提供您正在寻找的灵活性。

    【讨论】:

    • 关于nexus staging repo我没有提到的另一件事是这个过程似乎需要大量的手动工作。我需要这个过程完全自动化和脚本化,就像我们经常做的2-3 updates to QA per day。因此,由于增加的开销,要求构建工程师不断创建新的暂存存储库以供开发部署到其中是行不通的。我阅读的所有文档都提供了使用 nexus gui 的步骤,这对于我们拥有的大容量来说是不实用的。
    • Nexus 暂存套件会自动生成暂存存储库,只需部署即可。此外,还有一个用于自动化操作的 Maven Nexus 插件:“close”、“promote”、“drop”和“release”。该过程可以完全自动化。查看文档:sonatype.com/books/nexus-book/reference/…
    • 关于独立版本化的组件——我们已经这样做了,但是有一组给定版本的给定组件,例如,12 月版本可能包括计费模块的 v1.5和 SoundProcessor 模块的 v2.3.1。除了在 12 月版本中之外,这 2 者之间没有真正的依赖关系。
    • 在再次查看文档之后,一切看起来都很好,直到我们需要告诉 nexus 如何决定将哪些项目添加到暂存存储库中。它在那里分崩离析,因为实际上唯一的方法是通过我们的 SCM 系统中的分支名称,这在 nexus 中是不可见的。 artifactory 选项看起来可以解决问题,但我必须进行大量测试才能看到
    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    相关资源
    最近更新 更多