小编典典

使用Maven和Jenkins分阶段部署快照工件

jenkins

问题描述

我们有几个相互依赖的多模块项目。所以像这样:

  • 讯息传递
  • 构架
  • 其他成分

他们有单独的源代码控制存储库,可以说, 消息传递其他 组件内的子模块正在使用来自 框架
子模块的捆绑包。所有项目都是基于OSGI的多模块Maven项目。它们全部都有一个服务器部分和一个来源GUI部分(Eclipse RAP +
RCP)。因此,这最终针对所有这些多模块项目以三步为 基础的Maven构建(因为Tycho构建不能与普通的旧Maven构建混合使用)

  • 构建服务器部分
  • 建立RAP GUI零件
  • 构建RCP GUI部件

最后是一个 最终产品 多模块Maven项目(我们称其为 ourproduct ),它使用 消息传递框架
其他组件 。项目 ourproduct的 版本号与其他三个版本号不同的其他版本号相同。

我们使用Jenkins构建整个过程,而作业依赖于依赖关系树而相互触发。该公司决定使用快照在3个框架项目开发人员和 ourproduct
开发人员之间获取更直接,更快速的反馈。这可能是一个不错的主意,但是存在很大的问题。

如果建筑物链中的东西坏了,比快照库包含的快照 消息框架othercomponent ,不能一起工作。这样,
我们产品 的开发人员就必须等待有效的快照集(否则他们甚至无法编译一段时间)。另一个问题是,在构建期间,快照集也不一致。

理念

对于 消息传递框架其他组件 ,Jenkins中有一个明确的 最终任务 。如果完成,则快照组必须正常工作,因此
我们的产品 团队可以使用它。 因此,我需要以某种方式收集由构建链创建的快照,并仅在整个构建链成功的情况下才部署快照。

  • 是否有这样做的可能性?

我的想法是简单地将作业更改为仅 安装 而不 部署 。然后最后,我可以在本地Maven存储库中查找构建的快照,并通过脚本进行部署。

  • Maven有一些暂存概念(可能仅适用于Nexus pro)。它与快照有关吗?

任何想法都欢迎。但是我不能改变使用快照的事实。因此,说服我使用发行版和快照没有任何用处。


阅读 430

收藏
2020-07-25

共1个答案

小编典典

我找到了一个不错的解决方法。采取的步骤:

  1. 构建步骤必须使用 altDeploymentRepository 参数部署到临时文件夹,而不是普通的目标存储库(请参阅http://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html

mvn deploy -DaltDeploymentRepository = stagingFolder :: default :: file:///
c:/ mytempfolder

  1. 使用此设置运行任意数量的构建步骤, 工件将收集在该文件夹中。您甚至可以毫无问题地恢复构建。您可以覆盖工件(但是我不推荐这样做)

  2. 完成所有构建步骤后,您必须运行以下命令(请参阅http://mojo.codehaus.org/wagon-maven-plugin/copy-mojo.html)。这将上传临时存储在文件夹中的所有工件:

mvn org.codehaus.mojo:wagon-maven-plugin:copy -Dwagon.source = file:/// c:/
mytempfolder -Dwagon.target =
http://somerepository.com/repositories/snapshots
-Dwagon.targetId = idreferredinsettingsxmltogetauthorization

重要的提示

旅行目标应在没有pom文件的文件夹中运行(因此必须在没有项目的情况下运行)。否则, fromDir 参数会出现奇怪的错误。

已知局限性

  1. 构建步骤应该使用相同的本地存储库运行,因为如果这些步骤需要其他工件生成的工件,则他们可以在本地存储库中找到它。
  2. 该解决方案不读取POM来获取应将工件上载到的存储库。今天将其连接到wagon命令中。但是我现在可以忍受它了:)
2020-07-25