当前位置: 首页 > 面试题库 >

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

解晟
2023-03-14
问题内容

问题描述

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

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

他们有单独的源代码控制存储库,可以说, 消息传递其他 组件内的子模块正在使用来自 框架
子模块的捆绑包。所有项目都是基于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)。它与快照有关吗?

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


问题答案:

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

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

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

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

  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命令中。但是我现在可以忍受它了:)


 类似资料:
  • 问题内容: 我们在项目中使用Jenkins在开发环境上进行构建和部署。我已经在jenkins中使用maven成功创建了一个战争文件,现在我必须创建另一个作业才能将该战争文件部署到weblogic服务器中。 但是,我不知道在jenkins中配置此作业所需的步骤。仅仅调用一个maven deploy命令就可以了吗?有人可以告诉我使用jenkins将war文件部署到weblogic 10.3.5中需要采

  • 如何通过Maven部署插件获得部署快照的时间戳到Nexus? 例如,我使用版本部署了一个工件,该工件使用时间戳(我假设Nexus创建了这个时间戳,或者至少是它的最后一个“内部版本号”部分)(格式)部署。我可以通过以下方式获得时间戳吗: 某个Maven命令/s? 某些Nexus REST API? 其他“纲领性”方式? 到目前为止,我只发现了一个烦人的解决方法--“在”我将工件部署到Nexus之后“

  • 我的名为“TestProject”的Java/Maven项目与我的jenkins and nexus repo挂钩: 我的pom.xml看起来是: 正如预期的那样,jenkins将工件上传到Nexus,看看jenkins build的控制台输出,如下所示: 问题是: 如果我在pom.xml中指定的版本是

  • 无法将快照工件部署到Nexus存储库。我一直收到返回代码400。无法部署项目:无法传输项目网络。iin:iin-web-0.0.1-snapshot:jar:iin-parent从/到快照(http://localhost:8081/nexus/content/repositories/snapshots/net/iin/iin-web-0.0.1-snapshot/iin-parent/iin-

  • 问题内容: 我的java / maven项目“ testproject”与我的jenkins和nexus回购挂钩: 我的pom.xml看起来像: 在我的詹金斯设置中,我有: 正如预期的那样,jenkins将工件上传到Nexus。查看jenkins build的控制台输出,如下所示: 问题是 : 鉴于我在pom.xml中指定的版本是 jenkins为何将testproject- 0.1-201205

  • 我正在做一个maven构建在我的jenkins和创建一个战争文件,我已经配置了webphere部署插件,并成功地测试了连接。我试图部署战争文件webshere部署插件,但我得到一个错误 部署到IBM WebSphere Application Server时出错:应为Ant GLOB模式。 我猜在我部署maven build时,它需要一个ant构建。 我在jenkins中复制了WebSphereD