我们有几个相互依赖的多模块项目。所以像这样:
他们有单独的源代码控制存储库,可以说,消息传递和其他组件中的子模块正在使用框架的子模块中的包。所有项目都是基于OSGI的多模块maven项目。它们都有一个服务器部分和一个源GUI部分(Eclipse RAP + RCP)。所以这最终是基于maven的三步构建,适用于所有这些多模块项目(因为Tycho构建不能与普通的旧Maven构建混合):
最后有一个最终产品多模块maven项目(我们称之为我们的产品),它使用消息,框架和其他组件。项目我们的产品的版本号与其他三个版本号不同,后者具有通用版本号。
我们使用Jenkins构建整个事物,并且作业根据依赖关系树相互触发。该公司决定使用快照在3个框架项目开发人员和我们的产品开发人员之间获得更直接,更快速的反馈。这可能是一个好主意,但是存在一个很大的问题。
如果在构建链中某些内容被破坏,则快照存储库包含消息传递,框架和其他组件的快照,这些快照无法一起工作。这样,我们的产品的开发人员必须等待工作快照集(否则他们甚至无法编译一段时间)。另一个问题是在构建期间,快照集也不一致。
对于消息,框架和其他组件,Jenkins中有一个明确的结束作业。如果完成,那么快照集必须正常工作,因此我们的产品团队可以使用它。 所以我需要以某种方式收集构建链创建的快照,并且只有在整个构建链成功时才部署它们。
我的想法是简单地将作业更改为仅安装而不是部署。然后在最后我可以在本地maven仓库中查找构建的快照,并通过脚本部署它们。
欢迎任何想法。但是,我不能改变使用快照的事实。所以说服我使用版本和没有快照是没有用的。
答案 0 :(得分:2)
我找到了一个很好的解决方法。采取的步骤:
构建步骤必须使用 altDeploymentRepository 参数部署到临时文件夹而不是普通目标存储库(请参阅http://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html)
mvn deploy -DaltDeploymentRepository = stagingFolder :: default :: file:/// c:/ mytempfolder
使用此设置运行任意数量的构建步骤,并在文件夹中收集工件。您甚至可以毫无问题地恢复构建。您可以覆盖工件(但我不建议)
完成所有构建步骤后,您必须运行以下命令(请参阅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 :(得分:1)
Jenkins允许收集其他构建的工件(如果他们在项目配置中标记这些)。 您的集成测试可以使用该构造从快照构建中收集所需的构建,并且只有在完成集成测试后才将一组软件包上传到Nexus。您可以从检查OSGI包中的清单开始。我建议使用jar-signing作为登台标记,因为devops的取证分析很容易。
btw Nexus Pro有一个升级概念。