在GitHub Actions上运行Gradle构建
GitHub Actions为托管在GitHub上的项目提供了一个方便而强大的CI平台。为了增强在GitHub Actions上构建Gradle项目的体验,Gradle团队开发了gradle-build-action
。与Gradle Build Scans™一起,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动作
在现有的 GitHub Actions 工作流中添加一个设置步骤,就可以很容易地利用gradle-build-action
的优势,类似于使用actions/setup-java动作为工作流配置 JVM 的方式。
关于如何在工作流程中使用gradle-build-action
,请查看Gradle Build Tool文档或README。
Gradle 构建动作的特点
在工作流运行之间保存和恢复Gradle用户主目录
Gradle用户主目录保存了很多有价值的状态,可以加快Gradle的后续调用。下载的依赖项、编译的构建脚本、本地构建缓存和生成的API jars都存储在Gradle用户主页中。
每个GitHub Actions任务都在一个新的构建运行器上运行,这意味着它将从一个空的Gradle用户主页目录开始。幸运的是,GitHub Actions提供了一种缓存机制,允许在运行一个作业后保存Gradle用户主页状态,并在运行另一个作业前恢复。这可以大大减少运行Gradle构建的时间,因为不需要重新下载依赖关系,重新生成Gradle API罐子等。
然而,正确地进行这种缓存并非易事。很容易保存过多的状态(迅速填满GitHub Actions的缓存),或者没有指定缓存键(导致重要的东西被省略)。
gradle-build-action
为你处理这些细节,以特定于Job的方式从Gradle用户主页保存和恢复最重要的文件,同时提取普通文件并单独保存,以减少存储的条目的冗余。许多行为都是可配置和可调整的。gradle-build-action
采用的保存/恢复策略的细节(以及相关的配置选项)将是未来文章的主题。
为每次构建显示结果和Gradle构建扫描
默认情况下,GitHub Actions 不会像其他 CI 平台那样与 Gradle 深度集成。它没有提供构建结果的高层视图,也没有很好地显示测试的通过和失败。相反,你需要检查日志中的任何失败信息,而且测试报告需要保存为构建工件,可以下载来检查任何测试失败。
然而,通过使用gradle-build-action
,并配置每个Gradle调用来发布Build Scans,你可以设置你的GitHub Actions工作流,以提供这些你已经开始期待的可用性功能。gradle-build-action
对所有的Gradle构建调用进行记录,捕捉细节,如执行的任务、构建结果和产生的任何构建扫描的链接。而链接的Gradle Build Scan提供了一个完整的构建执行视图,包括所有的构建日志、完整的任务时间线、测试输出、解决的依赖关系以及构建的性能特征。
更多细节,请阅读谷歌AndroidX团队如何利用gradle-build-action和Gradle Build Scans来帮助他们在GitHub Actions CI环境中更快地排除构建和测试失败的问题。
使用指定的Gradle版本执行你的构建
我们推荐大多数项目使用Gradle Wrapper来运行Gradle,默认情况下,gradle-build-action
不会下载或安装Gradle Distribution。但在某些情况下,你可能想用不同版本的Gradle来运行你的构建:例如,你想用Gradle候选版本对你的构建进行冒烟测试,或者你想用不同Gradle版本的矩阵来测试你的Plugin样本。
为此,gradle-build-action
,能够下载并安装任何版本的Gradle。如果向动作提供了'gradle-version'参数,它将下载(和缓存)Gradle发行版的压缩包,安装它,并将其添加到PATH中。也支持 "最新"、"候选发布版 "和 "夜间版 "等别名值。 然后,当你在随后的工作流程步骤中运行gradle
,就会使用这个已安装的版本。
为什么要使用gradle-build-action?
如果你熟悉GitHub动作,你可能想知道为什么要使用gradle-build-action
,而不是简单地配置actions/cache
或actions/setup-java
,在工作流运行之间保存和恢复Gradle依赖。
我们认为gradle-build-action
提供了实质性的好处:请查看行动README的这一部分。如果你还有问题,请随时在github.com/gradle/grad…
使用Gradle和GitHub动作的更好体验
gradle-build-action
为在GitHub Actions上运行Gradle构建提供了一种简单有效的方法,最大限度地利用了GitHub Actions的缓存,并展示了每个Gradle执行的重要信息。当与免费的Gradle Build Scans(或自我托管的Gradle Enterprise Build Scans)相结合时,在GitHub Actions上运行Gradle构建比以前更好了。