Как ускорить сборку Java Maven на Google Cloud Build (100 зависимостей) - PullRequest
1 голос
/ 14 мая 2019

Я использую Google Cloud Build для создания Java-проекта, который имеет сотни зависимостей. По умолчанию кэш локального репозитория maven будет пустым, и он загружает все зависимости каждый раз при сборке .

Документация Google предлагает только "Кэширование каталогов с помощью Google Cloud Storage" https://cloud.google.com/cloud-build/docs/speeding-up-builds, но синхронизация 7000 файлов занимает много времени (что означает, что сборка идет медленнее)

только одна зависимость - 5 файлов

repository/org/mockito
repository/org/mockito/mockito-core
repository/org/mockito/mockito-core/2.15.0
repository/org/mockito/mockito-core/2.15.0/mockito-core-2.15.0.jar
repository/org/mockito/mockito-core/2.15.0/mockito-core-2.15.0.jar.sha1
repository/org/mockito/mockito-core/2.15.0/mockito-core-2.15.0.pom
repository/org/mockito/mockito-core/2.15.0/mockito-core-2.15.0.pom.sha1
repository/org/mockito/mockito-core/2.15.0/_remote.repositories

Пример файла cloudbuild.yaml

steps:
- name: gcr.io/cloud-builders/gsutil
  args: ['rsync', '-r', 'gs://my-mavencache-bucket/repository', '.']

- name: 'gcr.io/$PROJECT_ID/mvn'
  args: ['package']
...

Я бы хотел смонтировать gs: // my-mavencache-bucket как том - но я не вижу возможности сделать это

1 Ответ

0 голосов
/ 15 мая 2019

После долгих экспериментов это решение, похоже, работает довольно хорошо. Google-хранения-универсал .Этот плагин maven предоставляет механизм для чтения и публикации артефактов maven из корзины данных Google

Maven pom.xml содержит

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
...
    <repositories>
        <repository>
            <id>my-repo-bucket-release</id>
            <url>gs://bucket-ave-build-artifact/external</url>
            <releases>
                <enabled>true</enabled>
                <!-- TODO figure out why checksums do not match when artifact pulled from GCP -->
                <checksumPolicy>ignore</checksumPolicy>
            </releases>
        </repository>
    </repositories>

    <distributionManagement>
        <snapshotRepository>
            <id>my-repo-bucket-snapshot</id>
            <url>gs://my-build-artifact-bucket/snapshot</url>
        </snapshotRepository>
        <repository>
            <id>my-repo-bucket-release</id>
            <url>gs://my-build-artifact-bucket/release</url>
        </repository>
    </distributionManagement>
...
        <extensions>
            <extension>
                <groupId>com.gkatzioura.maven.cloud</groupId>
                <artifactId>google-storage-wagon</artifactId>
                <!-- version 1.8 seems to produce exception, ticket logged -->
                <version>1.7</version>
            </extension>
        </extensions>

    </build>

, а cloudbuild.yaml просто

steps:
 - name: 'gcr.io/cloud-builders/mvn'
  # -X here simply for verbose maven debugging
  args: ['deploy', '-X']

это будет:

  1. maven публикует артефакты в корзину данных gs: // my-build-artifact-bucket / release
  2. загружает внешние зависимости из gs: // my-build-artifact-bucket / external (если они существуют в этом каталоге)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...