Статьи

Кэширование Concourse для Java Maven и Gradle.

В 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
 
      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.