我正在使用Jenkins进行Liferay7.2部署自动化,我们在GitLab存储库中有Liferay工作区(源代码),我的问题是我不能在GitLab中克隆更改/修改的单个模块(portlet)并在推送事件后构建它,相反,整个工作区都在克隆和构建,这会耗费时间来构建所有模块。我已经在GitLab中实现了post提交钩子,用于git存储库中的任何更改。请建议如何实现这一点。
发布于 2019-09-17 00:02:12
这是一个非常广泛的问题,它将主要取决于您的组织如何使用Jenkins。
有了push事件,你只知道它会发生,Jenkins会加载代码。它不会每次都克隆,除非你构建了一个可以做到这一点的脚本。
在任何情况下,您都将在Jenkins中创建一个工作环境来表示该作业,并为其创建一个独占目录。要利用已构建的模块,您需要为此编写脚本。
比方说,一种想法是利用Gradle (顺便说一句,您可以使用与Jenkins相同的编程语言- Groovy)。您可以从在您的工作区中使用包装器开始,这样可以节省使用Gradle包装器的时间,如果您生活在GitLab项目中,那么Gradle包装器可以带来的所有优势。
使用Gradle,您可以构建缓存来真正加快您的处理速度,但在Jenkins作业中实现这一点有点困难,因为Jenkins作业对每个作业执行都有自己的一组构建工件。但是,您可以使用Gradle检查或选择使用自定义逻辑构建的模块。
假设您开始使用一个名为version.propeties的文件或一个带有诸如“build.gradle”之类指示符的常规快照来标记模块。Gradle构建逻辑可以使用它来选择工作区的子项目(这是一个Gradle项目)。
但最终,您可能会注意到,您的模块组可能在其他项目中,而有些模块几乎从未更新过,您可能会将它们放入自己的工作区。这样做没什么坏处。
另一点是确保您使用的是Gradle的并行构建设置,并且您的硬件可以完成任务。用于构建的Gradle守护进程也可能会有所帮助。
有无限的因素可以帮助你,但是你的环境是告诉你你能做什么的主要指南。例如,您的Jenkins sys管理员可能已经安装了一个全局Gradle守护进程,以及一个全局Gradle环境,在该环境中可以为您的maven依赖项使用一个工件缓存。他们还可以安装一个maven服务器,它也可以作为远程依赖项的缓存……
最后,它太宽泛了,不能告诉你任何具体的建议。但我要告诉你的是:关注Gradle而不是Jenkins。此外,如果你能加快你的依赖解析和下载时间,这在几个项目中会有很大的帮助。
https://stackoverflow.com/questions/57947506
复制相似问题