0

我正在使用 Jenkins 进行 Liferay 7.2 部署自动化,我们在 GitLab 存储库中有 Liferay 工作区(源代码),我的问题是我无法克隆仅更改/修改的单个模块(portlet)并在推送事件后构建它GitLab,相反,整个工作区正在被克隆和构建,这会花费时间来构建所有模块。我已经在 GitLab 中为 git 存储库中的任何更改实现了提交后挂钩。请建议如何实施。

4

1 回答 1

1

这是一个非常广泛的问题,主要取决于您的组织如何使用 Jenkins。

通过推送事件,您只知道它发生了,Jenkins 将加载代码。它不会每次都克隆,除非您构建一个这样做的脚本。

在任何情况下,您都将在 Jenkins 中创建一个工作环境来代表该工作,并为其提供一个专有目录。要利用已经构建的模块,您需要为此编写脚本。

比方说,一个想法是利用 Gradle(顺便说一句,您可以使用与 Jenkins 相同的编程语言 - Groovy)。您可以从在工作区中使用包装器开始,这样可以节省时间来了解 Gradle 包装器在 GitLab 项目中带来的所有优势。

使用 Gradle,您可以构建真正加快处理速度的缓存,但在每个作业执行都有自己的构建工件集的 Jenkins 作业中实现这一点有点困难。但是,您可以使用 Gradle 来检查或选择要使用自定义逻辑构建的模块。

假设您开始使用名为“snapshot”之类的指示符的文件version.propeties或常规标记模块。build.gradle您的 Gradle 构建逻辑可以使用它来选择工作区的子项目(这是一个 Gradle 项目)。

但最后,您可能最终会注意到您有可能在其他项目中的模块组和一些几乎从未更新过的模块,您可能会将它们放入自己的工作区。这样做没有坏处。

另一点是确保您使用 Gradle 的并行构建设置,并且您的硬件能够胜任这项任务。用于构建的 Gradle 守护程序也可以提供帮助。

有无数的因素可能会有所帮助,但你的环境是告诉你可以做什么的主要指南。例如,您的 Jenkins 系统管理员可能已经安装了一个全局 Gradle 守护程序和一个全局 Gradle 环境,其中工件缓存可以为您的 Maven 依赖项而存在。他们还可以安装一个 Maven 服务器,该服务器还充当远程依赖项的缓存......

最后,它太宽泛,无法告诉您任何具体建议。但我会留给你这个:关注 Gradle 而不是 Jenkins。此外,如果您可以加快您的依赖关系解析和下载时间,这对几个项目有很大帮助。

于 2019-09-16T16:02:11.540 回答