使用JFrog Artifactory加速Gradle构建

加快Gradle构建

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

让我们从一个使用JFrog Artifactory作为控件的示例开始Gradle构建缓存.这个例子将展示我们如何将构建时间从11秒减少到1秒!!

一个典型的场景

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

Gradle构建缓存

JFrog人工零件

我们将从简单地创建一个通用存储库在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}}

我们将把gradle.cache.push属性设置为true,在CI服务器上使用-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填充。

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

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

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

20170526153341|3|REQUEST|127.0.0.1|admin| /gradle-cache-example/6dc9bb4c16381e32ca1f600b3060616f|HTTP/1.1|200|1146 20170526153341|4|REQUEST|127.0.0.1|admin|GET|/gradle-cache-example/e5a67dca52dfaea60efd28654eb8ec97|HTTP/1.1|200|1296 20170526153341|10|REQUEST|127.0.0.1|admin|GET|/gradle-cache-example/ 24850eca03e13321f28e19ddf421e92 |HTTP/1.1|200|1062 20170526153342|3|REQUEST|127.0.0.1|admin| /gradle-cache-example/ 82d9c0fd6f3346d4b079f0f4a96321e |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人工查询语言(AQL)。
  • 在本地和远程团队之间使用推拉同步的分布式缓存库中复制这样不仅你的Gradle构建更快,你的同事在大洋彼岸的构建也会更快。
    了解有关跨不同站点复制的更多信息,请参见多站点拓扑白皮书

Gradle构建缓存

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