Concourse CI 3.3.x引入了在任务运行之间缓存路径的功能。 此功能有助于加快将内容缓存在特定文件夹中的任务-在这里,我将演示如何使用此功能来加快基于Maven和Gradle的Java构建。
我在这篇文章中使用的代码和管道可以在我的github仓库中找到 – https://github.com/bijukunjummen/ci-concourse-caching-sample
如果要使用gradle包装器通过以下命令构建项目,那么让我从gradle构建开始:
./gradlew clean build
然后gradle默认会将依赖库下载到用户主文件夹中的“ .gradle”文件夹中。 可以使用“ GRADLE_USER_HOME”环境变量更改此文件夹的此位置,这是我将在合并任务中用于控制缓存路径的位置的变量。
构建我的项目的场所任务如下所示 :
---
platform: linux
image_resource:type: docker-imagesource:repository: openjdktag: 8-jdk
inputs:- name: repo
outputs:- name: out
run:path: /bin/bashargs:- repo/ci/tasks/build.shcaches:- path: .gradle/- path: .m2/params:PROJECT_TYPE:
请参阅上面的caches参数指定为“ .gradle”。 因此,我现在要做的就是确保Gradle使用此位置作为其主文件夹,这将在我的构建脚本中执行:
export ROOT_FOLDER=$( pwd )
export GRADLE_USER_HOME="${ROOT_FOLDER}/.gradle"
为Maven构建缓存Maven资源的过程是相同的,Maven将依赖的jar缓存在可以以多种方式指定的位置,我使用的一种方式是通过动态生成的设置来指定此位置。 xml文件的格式如下:
M2_HOME=${HOME}/.m2
mkdir -p ${M2_HOME}M2_LOCAL_REPO="${ROOT_FOLDER}/.m2"mkdir -p "${M2_LOCAL_REPO}/repository"cat > ${M2_HOME}/settings.xml <<EOF<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0https://maven.apache.org/xsd/settings-1.0.0.xsd"><localRepository>${M2_LOCAL_REPO}/repository</localRepository>
</settings>EOF
这是大量的bash脚本,它所要做的就是生成一个settings.xml,其中将localRepository标记设置为“ .m2 / repository”文件夹,该文件夹相对于由concourse为构建生成的临时文件夹,因此可以缓存。
完成这些更改后,行为是下载在任务的第一次运行时发生,但随后被缓存以供后续运行。 在我的本地场所设置中,gradle首次构建大约需要2分钟,而后续的构建大约需要20秒!
您可以在我的演示项目中试用此功能– https://github.com/bijukunjummen/ci-concourse-caching-sample
翻译自: https://www.javacodegeeks.com/2017/08/concourse-caching-java-maven-gradle-builds.html