有一段时间我的公司正在使用Maven和TeamCity来构建Java。目前,我们在持续整合和最终持续交付方面进行了大量投资。
在许多较小的应用程序(应用程序)中,我们正在运行一个大型的整体应用程序。 100万LOC。相当大的构建代理上的这个应用程序需要5分钟编译(包括2分钟svn)。它的12k单元测试再运行5分钟。将构建结果部署到Nexus至少需要10分钟。
为了向开发人员提供快速反馈,我们尝试分割在不同构建任务中要完成的工作量。目前我们正在使用以下设置:
关于此的好处:第2步仅在成功构建且步骤1更改时才构建。
这种方法存在一个主要缺点:步骤2完成了步骤1的所有操作。如果我将步骤3和浏览器级别的Selenium测试部署到测试系统中,那么很多事情将被执行两次或三次。
我们尝试过的替代方案:
有没有人知道如何更好地设置它?
非常感谢, 斯蒂芬
答案 0 :(得分:1)
我们现在做了一个星期的快照依赖,我已经成长为喜欢它们,除了它们的效率低下。
TeamCity确实在构建中显示依赖性问题,并且有一个专门用于Build Chains的文档页面,告诉我这就是解决这些问题的方法。
感谢那些对这个问题感兴趣的人。我现在要关闭它。
答案 1 :(得分:0)
我想分享自己的可能性,虽然我不确定是否应该这样做。目标仍然是缩短反馈周期:
部署到Nexus是一个瓶颈,因为它需要10到20分钟(取决于网络和Nexus),而其余步骤也是10分钟。我注意到我们正在为Nexus部署超过持续集成所需的内容:不仅是Maven工件,还有可交付成果,例如rpms或wars。可能是部署时间的一半只是因为这个原因。
我们可以设置第三步“第3步:构建可交付成果”。这可以基于该问题的自己的POM,以避免一切都被编译和测试。此POM将对第二步中创建的Maven工件具有快照依赖性。
但我不确定这是否是在Maven或TeamCity中做这些事情的最佳方式。我仍然希望有其他解决方案或想法。