我是Nexus和Ant的新手。 我通过Jenkin Hudson构建了由ant驱动的作业,成功地生成了组件。我们有SVN作为源存储库。
这里的问题是,当我运行Hudson作业时,所有组件都会再次创建到nexus存储库中。假设我的应用程序中有5个罐子,我只更改了一个对应于特定jar的类文件。不是仅创建具有变化的罐子,而是每次都创建所有5个罐子。
是否有一些设置为Jenkins可以帮助我实现我正在寻找的东西..或者这是需要通过ant build.xml控制的东西吗?
提前感谢您的帮助。
答案 0 :(得分:0)
您的设置会比您允许我们了解的更多。
首先,您说 Ant ,但您使用的是 Maven 存储库。你在用常春藤吗?或者,您是否使用<wget>
任务下载jar?
如何将您的jar 部署到Maven资源库?你使用Ant插件,Jenkins插件,还是使用mvn deploy:deploy-file
?您是在Jenkins工作定义中执行此操作还是使用Promoted Build Plugin或Repository Connector Plugin之类的内容?
最后,究竟是什么问题?将jar部署到Nexus存储库是一个问题吗?詹金斯工作重建所有五个罐子是一个问题吗?而且,为什么这是一个问题?如果将jar重新部署到Nexus存储库有什么问题?需要花费太多时间吗?如果jar的校验和没有改变,你能否配置Nexus不运行部署?
另外,为什么要在一个项目中建造五个罐子。你可以把它变成五个独立的Jenkins工作,并且只构建源变更的罐子吗?
应用程序构建了战争外部的单一战争和一堆罐子。他们仍在战争之外。我有一个java Web应用程序XXX。在此应用程序上运行构建作业时,我将获得abc.war和aaa.jar,bbb.jar,ccc.jar。 build.xml中提到了要创建的jar。
以下是我们处理此问题的方法。您可能需要一些设置。
首先,我们使用Ivy和Ant。 Ivy允许我们使用Maven依赖管理而无需完全重构我们的构建过程。
每个jar都是我们Jenkins服务器中的一个单独项目。当jar的代码改变时,jar会重建。不知道你的存储库和项目是如何构建的,你可能更难做到这一点。
如果您的战争设置为为每个jar调用单独的build.xml,那么执行此操作应该不会太难。如果您有一个build.xml,但每个jar的单独目标,并且每个jar的源代码都在一个单独的树中,那么它将会有点过时。您可以设置Jenkins以检出/更新整个项目源代码,但只查看特定目录中的源代码以查看是否需要重建。如果所有罐子的源代码以复杂的方式混合在一起,那就更难了。
我们使用Jenkins Promoted Build Plugin将构建的jar部署到我们的Maven存储库。这使我们可以更灵活地决定何时部署jar。我们的标准做法是在每次构建后部署快照版本(让开发人员使用最新功能),但在我们的战争中使用发行版本。
当部署了一个新版本的jar时,我们会对其进行设置,以便自动重建任何依赖于该战争的项目。
当我们构建战争时,我们不构建jar,而是使用<ivy:retrieve>
从我们的存储库中检索所需的jar。
所以:
我希望这会有所帮助。
你可以尝试不在Jenkins的构建之间清理你的构建碎片。在Jenkins中仅使用仅使用来更新尚未更改的源文件。 Ant将自动不重建尚未更改的内容。这意味着未更改的*.java
文件将不会重新编译,如果*.jar
文件的组件未更改,则不会重建这些文件。
但是,您必须确保build.xml
是防弹且结构良好的。否则,你最终会受到很多伤害。在我目前工作的前六个月,我重新编写了所有build.xml
文件,以确保它们结构良好,并且可以避免构建。您可能需要做很多工作才能使其正常工作。