使用 GitHub Actions 更好地使用 Gradle
目录
在 GitHub Actions 上运行 Gradle 构建 #
GitHub Actions 为托管在 GitHub 上的项目提供了一个便捷而强大的 CI 平台。为了增强在 GitHub Actions 上构建 Gradle 项目的体验,Gradle 团队开发了 gradle-build-action
。结合 Gradle 构建扫描™,gradle-build-action
提供了 Gradle 和 GitHub Actions 之间的深度集成,在通过 GitHub Actions 构建和测试 Gradle 项目时,提供更简单的设置和更好的体验。
gradle-build-action
是在 GitHub Actions 中运行 Gradle 构建的 官方支持 方式,它负责为你的 GitHub Actions 工作流准备和优化 Gradle。当应用于工作流时,所有后续的 Gradle 调用都将被优化,允许你在常规工作流步骤中简单地运行 ./gradlew build
。
gradle-build-action
提供的主要特性包括
- 下载并安装指定版本的 Gradle(如果需要)
- 在工作流运行之间保存和恢复 Gradle 用户主目录
- 显示工作流中执行的任何 Gradle 构建的结果和 Gradle 构建扫描
以下将更详细地描述每个特性。
使用 Gradle Build Action #
通过向现有 GitHub Actions 工作流添加设置步骤,可以轻松利用 gradle-build-action
,类似于你使用 actions/setup-java action 为你的工作流配置 JVM 的方式。
有关如何在工作流中使用 gradle-build-action
的详细信息,请查看 Gradle 构建工具文档 或 README。
Gradle Build Action 的特性 #
在工作流运行之间保存和恢复 Gradle 用户主目录 #
Gradle 用户主目录持久化保存了大量有价值的状态,可以加速后续 Gradle 的调用。下载的依赖项、编译的构建脚本、本地构建缓存和生成的 API jar 都存储在 Gradle 用户主目录中。
每个 GitHub Actions Job 都在全新的构建运行器上运行,这意味着它将从一个空的 Gradle 用户主目录开始。幸运的是,GitHub Actions 提供了一种缓存机制,允许在运行一个 job 后保存 Gradle 用户主目录状态,并在运行另一个 job 之前恢复。这可以大大减少运行 Gradle 构建所花费的时间,因为它消除了重新下载依赖项、重新生成 Gradle API jar 等的需要。
然而,正确地进行缓存并非易事。很容易保存过多的状态(快速填满 GitHub Actions 缓存),或者过度指定缓存键(导致重要的内容被遗漏)。
gradle-build-action
为你处理了细节,以 Job 特定的方式保存和恢复 Gradle 用户主目录中最重要文件,同时提取公共文件并将它们单独保存,以减少存储条目中的冗余。许多行为是可配置和可调整的。gradle-build-action
采用的保存/恢复策略的详细信息(以及相关的配置选项)将是未来帖子的主题。
显示每次构建的结果和 Gradle 构建扫描 #
默认情况下,GitHub Actions 没有像其他一些 CI 平台那样与 Gradle 深度集成。它没有提供构建结果的高级视图,也没有很好地呈现通过和失败的测试显示。相反,你需要检查日志以查找任何失败消息,并且需要将测试报告保存为构建产物,以便下载并检查任何测试失败。
然而,通过使用 gradle-build-action
并配置每次 Gradle 调用以发布构建扫描,你可以设置你的 GitHub Actions 工作流来提供你期望的这些可用性特性。gradle-build-action
记录所有 Gradle 构建调用,捕获诸如执行的任务、构建结果以及指向任何生成的构建扫描的链接等详细信息。链接的 Gradle 构建扫描提供了构建执行的完整视图,包括所有构建日志、完整的任务时间线、测试输出、解析的依赖项以及构建的性能特征。
有关更多详细信息,请阅读关于 Google AndroidX 团队如何利用 gradle-build-action 和 Gradle 构建扫描,以帮助他们更快地在 GitHub Actions CI 环境中排除构建和测试故障。
使用指定的 Gradle 版本执行构建 #
我们建议大多数项目使用 Gradle Wrapper 来运行 Gradle,默认情况下 gradle-build-action
不会下载或安装 Gradle 发行版。但在某些情况下,你可能希望使用不同版本的 Gradle 运行构建:例如,你希望使用 Gradle 候选发布版进行冒烟测试,或者你希望使用不同 Gradle 版本的矩阵测试你的插件示例。
为此,gradle-build-action
能够下载和安装任何版本的 Gradle。如果为 action 提供了 ‘gradle-version’ 参数,它将下载(并缓存)Gradle 发行版 zip 文件,安装它,并将其添加到 PATH。还支持诸如 ‘latest’、‘release-candidate’ 和 ‘nightly’ 之类的别名值。然后,当你后续的工作流步骤中运行 gradle
时,将使用此安装的版本。
为什么使用 gradle-build-action? #
如果你熟悉 GitHub Actions,你可能想知道为什么你需要使用 gradle-build-action
,而不是简单地配置 actions/cache
或 actions/setup-java
来保存和恢复工作流运行之间的 Gradle 依赖项。
我们相信 gradle-build-action
提供了实质性的好处:请查看 action README 的这一部分。如果你仍然有疑问,请随时在 https://github.com/gradle/gradle-build-action/issues 提问。
更好的 Gradle 和 GitHub Actions 体验 #
gradle-build-action
提供了一种简单有效的方式,可以在 GitHub Actions 上运行 Gradle 构建,最大限度地利用 GitHub Actions 缓存,并呈现有关每次 Gradle 执行的重要信息。当与免费的 Gradle 构建扫描(或自托管的 Gradle Enterprise 构建扫描)结合使用时,在 GitHub Actions 上运行 Gradle 构建比以往任何时候都更好。