В Concourse CI 3.3.x появилась возможность кэширования путей между запусками задач. Эта функция помогает ускорить задачи, которые кэшируют контент в определенных папках — здесь я покажу, как эту функцию можно использовать для ускорения сборок Java на maven и gradle .
Код и конвейер, который я использую для этого поста, доступны в моем репозитории github здесь — https://github.com/bijukunjummen/ci-concourse-caching-sample
Позвольте мне начать с сборки gradle, если бы я собирал проект, используя оболочку gradle, используя следующую команду:
1
|
./gradlew clean build |
тогда gradle будет загружать зависимые библиотеки в папку «.gradle» в домашней папке пользователя по умолчанию. Это расположение этой папки можно изменить с помощью переменной среды «GRADLE_USER_HOME», которую я буду использовать в задаче конкурса для управления расположением кэшированного пути.
Задача конкурса, которая создает мой проект, выглядит следующим образом :
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
--- platform: linux image_resource: type: docker-image source: repository: openjdk tag: 8 -jdk inputs: - name: repo outputs: - name: out run: path: /bin/bash args: - repo/ci/tasks/build.sh caches: - path: .gradle/ - path: .m2/ params: PROJECT_TYPE: |
См. Параметр caches указан как «.gradle» выше. Поэтому все, что мне нужно сделать сейчас, — это убедиться, что Gradle использует это местоположение в качестве домашней папки, что я и сделал бы в своем скрипте сборки:
1
2
|
export ROOT_FOLDER=$( pwd ) export GRADLE_USER_HOME= "${ROOT_FOLDER}/.gradle" |
Процесс кеширования ресурсов maven для сборки maven осуществляется в том же духе: maven кэширует зависимые файлы jar в расположении, которое можно указывать различными способами, и я использовал его для указания этого местоположения с помощью динамически генерируемых настроек. XML-файл следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
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" xsi:schemaLocation="http: //maven.apache.org/SETTINGS/1.0.0 https: //maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>${M2_LOCAL_REPO}/repository</localRepository> </settings> EOF |
это довольно сложный сценарий bash, все, что он делает, — это генерирует файл settings.xml с тегом localRepository, установленным в папку «.m2 / repository», который относится к временной папке, созданной в сборе для сборки, и, следовательно, может быть кэширован. ,
С учетом этих изменений, поведение таково, что загрузки происходят при первом запуске задачи, но затем кэшируются для последующих запусков. В моём локальном конкурсе сборка gradle, занимающая около 2 минут для первой сборки, занимает около 20 секунд для последующей сборки!
Вы можете попробовать эту функцию в моем демонстрационном проекте здесь — https://github.com/bijukunjummen/ci-concourse-caching-sample
Ссылка: | Кэширование конкурса для Java Maven и сборок Gradle от нашего партнера по JCG Биджу Кунджуммена из блога all and sundry. |