加速你的Gradle构建与JFrog Artifactory

加快您的Gradle构建

Gradle引入了一个很酷的内置功能,可以让你缓存任务输出。为什么这很酷?因为它减少了构建时间。怎么做?通过在机器之间共享Gradle任务的输出,可以加速后续的构建,因为它们可以重用这些输出,而不是重新构建它们。
现在,这是更酷的地方。该特性不仅支持本地文件系统缓存,还支持可以跨组织共享的远程缓存。

让我们从一个使用JFrog Artifactory作为Gradle构建缓存.这个例子将展示我们如何将构建时间从11秒缩短到1秒!!

一个典型的场景

我们从a开始简单用例, CI服务器在其中构建一个项目,并将构建缓存存储在Artifactory中,以供以后的构建使用。这将大大缩短本地开发人员环境中的构建时间。

Gradle构建缓存

JFrog Artifactory部分

我们将从简单地创建一个通用存储库在Artifactory。在我们的例子中,我们将其称为“gradle-cache-example”,是的,就是这样!

Gradle部分

我们将配置Gradle使用构建缓存,并使用以下配置将其指向Artifactory:

gradle.properties

Artifactory_user =admin artifactory_password=password artifactory_url=https://localhost:8081/artifactory org.gradle。缓存= true gradle.cache.push = false

settings.gradle

包括"shared", "api", "services:webservice" ext.isPush = getProperty('gradle.cache.push') buildCache {local {enabled = false} remote(HttpBuildCache) {url = "${artifactory_url}/gradle-cache-example/" credentials {username = "${artifactory_user}" password = "${artifactory_password}"} push = isPush}}

我们将在CI服务器上将gradle.cache.push属性设置为true,通过使用-Pgradle.cache.push = true

现在,我们可以构建这个模拟CI服务器的项目:

15:13 $ ./gradlew clean build -Pgradle.cache。在任务“:services:artifactoryPublish”中,项目“:services”中不存在名为“published”的配置。无法为项目“:services”发布pom,因为它不包含Maven插件安装任务,而任务“:services:artifactoryPublish”没有指定自定义pom路径。构建缓存是一个孵化特性。为根构建使用远程HTTP构建缓存(authenticated = true, url = https://localhost:8081/artifactory/gradle-cache-example/)。建立成功1113个可操作的任务:12个已执行,1个最新

构建耗时11秒。这听起来是对的,因为我们有一个测试只睡了10秒:

testClasspath()抛出InterruptedException {system . out。println(“执行重假测试”);thread . sleep (10000);新的测试().method ();}

现在,让我们第二次运行构建。请记住,缓存现在由CI填充。

15:29 $ ./gradlew清洁构建名为“published”的配置不存在于项目“:services”在任务“:services:artifactoryPublish”。无法为项目“:services”发布pom,因为它不包含Maven插件安装任务,而任务“:services:artifactoryPublish”没有指定自定义pom路径。构建缓存是一个孵化特性。使用本地目录构建缓存进行根构建(location = /Users/alexistual/.gradle/ cached /build-cache-1)。对根构建使用远程HTTP构建缓存(仅pull-only, authenticated = true, url = https://localhost:8081/artifactory/gradle-cache-example/)。建立成功113个可操作的任务:7个已执行,5个来自缓存,1个最新

哇!这一次,构建只花了1秒,这表明跳过了测试任务,而是从缓存中获取输出。

为了确保Gradle没有玩弄本地缓存,让我们检查Artifactoryrequest.log

20170526153341|3|REQUEST|127.0.0.1|admin|GET| HTTP/1.1|200|1146 20170526153341|4|REQUEST|127.0.0.1|admin|GET|/ 1.1|200|1296 20170526153341|10|REQUEST|127.0.0.1|admin|GET|/gradle-cache-example/24850eca03e013321f28e19ddf421e92|HTTP/1.1|200|1062 20170526153342|3|REQUEST|127.0.0.1| GET|/gradle-cache-example/ 82d9c0fd6f079f0f4a96321e |HTTP/1.1|200|98420170526153342 | | 3 |请求127.0.0.1管理| | | / gradle-cache-example / ad7b7f9a27090e72782121244f3deec2 HTTP / 1.1 | 200 | 4444 |

实际上,您可以看到编译和测试任务的输出来自我们前面创建的Artifactory通用存储库。

在这个例子中,我们展示了一个简单的场景,它获得了令人印象深刻但任意的10倍改进。也就是说,Gradle团队测量了一个平均值减幅25%总的构建时间,甚至减少了80%的提交!所以,你自己试试,看看有什么可能性。

Artifactory给画面带来了什么

这里是最好的部分,如果您已经在常规构建中使用JFrog Artifactory,则不需要设置任何内容。要添加远程缓存,您只需要创建一个通用存储库,定义一些权限,就完成了!

通过使用Artifactory,您将受益于:

  • 访问控制管理权限根据团队/项目/工具。例如,您可以为CI服务器用户提供部署权限,为开发人员提供读取权限。
  • 先进的清洁这些存储库中的任何一个都易于使用JFrog CLI而且Artifactory查询语言(AQL)。
  • 使用推和拉在本地和远程团队之间同步的分布式缓存库中复制这样不仅你的Gradle构建会更快,你的同事在大洋彼岸的构建也会更快。
    了解更多关于跨不同站点复制的信息,请访问我们的多站点拓扑白皮书

Gradle构建缓存

所以不要让Gradle构建让你在办公室工作到很晚。使用新的Gradle构建缓存特性和JFrog Artifactory,你的构建将足够快,让你及时离开办公室回家吃晚饭。