Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Maven和Jenkins分阶段部署快照工件 问题描述_Maven_Jenkins_Snapshot_Staging_Tycho - Fatal编程技术网

使用Maven和Jenkins分阶段部署快照工件 问题描述

使用Maven和Jenkins分阶段部署快照工件 问题描述,maven,jenkins,snapshot,staging,tycho,Maven,Jenkins,Snapshot,Staging,Tycho,我们有几个相互依赖的多模块项目。比如说: 消息传递 框架 其他组件 它们有单独的源代码管理存储库,并且可以说,消息传递和其他组件中的子模块正在使用来自框架子模块的捆绑包。所有项目都是基于OSGI的多模块maven项目。它们都有一个服务器部分和一个单一来源的GUI部分EclipseRAP+RCP。因此,对于所有这些多模块项目,这最终都是基于maven的三步构建,因为Tycho构建不能与普通的旧maven构建混合: 构建服务器部件 构建RAP图形用户界面部分 构建RCP GUI部件 最后还有一个终端

我们有几个相互依赖的多模块项目。比如说:

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

构建服务器部件 构建RAP图形用户界面部分 构建RCP GUI部件 最后还有一个终端产品多模块maven项目,我们称之为ourproduct,它使用消息传递、框架和其他组件。项目产品的版本号与其他三个版本号不同,它们具有相同的版本号

我们用Jenkins构建了整个过程,作业根据依赖树相互触发。公司决定使用快照在3个框架项目开发人员和我们的产品开发人员之间获得更直接和快速的反馈。这可能是一个好主意,但是有一个大问题

如果在构建链过程中有什么东西断开了,那么快照存储库就会包含消息、框架和其他组件的快照,它们无法一起工作。这样,我们产品的开发人员必须等待一个工作快照集,否则他们甚至无法编译一段时间。另一个问题是,在构建过程中,快照集也不一致

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

是否存在这样做的可能性? 我的想法是简单地将作业更改为只进行安装而不进行部署。最后,我可以在本地maven repo中查找构建的快照,并通过脚本进行部署

Maven可能只有在NexusPro上才有登台的概念。它说的是快照吗? 任何想法都欢迎。但是,我无法改变使用快照的事实。因此,说服我使用发布版而不使用快照是没有用的。

解决方案 我找到了一个很好的解决办法。采取的步骤:

构建步骤必须使用altDeploymentRepository参数部署到临时文件夹,而不是普通的目标存储库。请参阅

mvn部署-DaltDeploymentRepository=stagingFolder::默认值:file:///c:/mytempfolder

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

完成所有生成步骤后,必须运行以下命令请参见。这将上载临时收集到文件夹中的所有工件:

mojo:wagenmaven插件:copy-Dwagon.source=file:///c:/mytempfolder -Dwagon.target=-Dwagon.targetId=IDreferredSettingsxmltoGetAuthorization

重要提示 旅行车目标应该在一个文件夹中运行,那里没有pom文件,所以它必须在没有项目的情况下运行。否则,fromDir参数会出现一个奇怪的错误

已知的限制 构建步骤应使用相同的本地存储库运行,因为如果 这些步骤需要其他工件产生的工件,它们可以 在本地存储库中找到它。 此解决方案不会读取POM以获取工件应上载到的存储库。这是今天连接到马车指挥部的。但我现在可以接受了: 解决方案 我找到了一个很好的解决办法。采取的步骤:

构建步骤必须使用altDeploymentRepository参数部署到临时文件夹,而不是普通的目标存储库。请参阅

mvn部署-DaltDeploymentRepository=stagingFolder::默认值:file:///c:/mytempfolder

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

完成所有生成步骤后,必须运行以下命令请参见。这将上载临时收集到文件夹中的所有工件:

mojo:wagenmaven插件:copy-Dwagon.source=file:///c:/mytempfolder -Dwagon.target=-Dwagon.targetId=IDreferredSettingsxmltoGetAuthorization

重要提示 旅行车目标应该在一个文件夹中运行,那里没有pom文件,所以它必须在没有项目的情况下运行。否则,fromDir参数会出现一个奇怪的错误

已知的限制 构建步骤应该是r 取消使用同一本地存储库,因为如果 这些步骤需要其他工件产生的工件,它们可以 在本地存储库中找到它。 此解决方案不会读取POM以获取工件应上载到的存储库。这是今天连接到马车指挥部的。但我现在可以接受了:
Jenkins允许收集其他构建的工件,如果他们在项目配置中标记这些工件。 您的集成测试可以使用该构造从快照构建中收集所需的数据,并且仅在集成测试完成后将一组捆绑包上载到Nexus。您可以从检查OSGI包中的清单开始,我建议使用jar签名作为登台标记,因为devops很容易进行取证分析


顺便说一句,Nexus Pro有一个登台概念。

Jenkins允许收集其他版本的工件,如果他们在项目配置中标记这些工件。 您的集成测试可以使用该构造从快照构建中收集所需的数据,并且仅在集成测试完成后将一组捆绑包上载到Nexus。您可以从检查OSGI包中的清单开始,我建议使用jar签名作为登台标记,因为devops很容易进行取证分析


顺便说一句,Nexus Pro有一个登台概念。

不确定部署部分,但Jenkins可能有助于收集匹配的良好构建结果。不确定部署部分,但是Jenkins可能有助于收集匹配的良好构建结果。如果您将部署到的文件存储库添加为存储库(例如通过settings.xml.Yeah),则不需要共享相同的本地Maven存储库,但您可能希望使用dynamic temp文件夹名来完成整个工作,在这种情况下,动态编辑settings.xml是件麻烦事。如果您将部署到的文件存储库添加为存储库(例如,通过settings.xml.Yeah),则不需要共享同一个本地Maven存储库,但您可能希望使用dynamic temp文件夹名来完成整个工作,在这种情况下,动态编辑settings.xml是件麻烦事。谢谢你的回答。现在我对我的解决方案非常满意;谢谢你的回答。现在我对我的解决方案非常满意;